Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7d2a43f

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /