Skip to content

Commit 7d2a43f

Browse files
authored
Update README.md
1 parent 954a7d9 commit 7d2a43f

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

02_语法分析/README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -347,24 +347,24 @@
347347
例如 赋值语句(assign statement): var x=1
348348
例如 if语句(if statement): if(Expr){}[else if(){}]else{}
349349
```
350-
* if语句的递归向下分析
350+
* if语句的分析
351351
```
352352
parseIfStmt() → eat(if) → parseExpr() → parseBlock() → eat(else) → parseIfStmt()
353353
| eat(if) → parseExpr() → parseBlock()
354354
| eat(if) → parseExpr() → parseBlock() → eat(else) → parseBlock() (该过程可简化为一个parseBlock())
355355
```
356-
* function语句的递归向下分析
356+
* function语句的分析
357357
```
358358
parseFnStmt() → eat(function) → eat(id) → eat(params) → parseBlock()
359359
params → e | param,params
360360
param → Literal(可能是id、number、string)
361361
```
362-
* class语句的递归向下分析
362+
* class语句的分析
363363
```
364364
parseClassStmt() → eat(class) → eat(id) → eat(extends) → eat(id) → parseBlock()
365365
| eat(class) → eat(id) → parseBlock()
366366
```
367-
* import语句的递归向下分析
367+
* import语句的分析
368368
```
369369
parseImportStmt() → eat(import) → eat(id | object | array) → eat(from) → eat(string)
370370
```
@@ -373,6 +373,10 @@
373373
program → statements | e
374374
statements → statement statements | e
375375
statement → assignStmt | ifStmt | whileStmt | switchStmt | functionStmt | forStmt | classStmt |importStmt ...
376+
statement → statement + Expr | Expr + Literal | ...
377+
Expr → Expr + Term | Expr - Term | Expr
378+
Term → -Expr | (Expr) | Term * Literal | Term / Literal | Literal
379+
Literal → number | variable | string
376380
```
377381
* 复杂表达式的解析:以上只能解决+-*/的优先级问题,多层优先级问题使用后序遍历解决
378382
* 中序表达式:例如:a+b*c、a*b+c。树节点的左子树一定比右子树先遍历,即先处理左树再节点再右树,但不太适合解析

0 commit comments

Comments
 (0)