编译原理First与Follow集示例
(大写字母非终结符、小写字母终结符)
first集各种情况示例:
- 后面跟终结符
A->aB|ε
A->c
.....
First(A)={a,ε,c}
- 后面跟非终结符
A->Ba
B->b
.....
First(A)={a}
- 后面跟非终结符(带空)
A->Bc
B->b|ε
.....
First(A)={b,c}
注意:首先很容易推导出b
对于c是因为B->ε,当B为ε时 即A->c 此时就推出c在first集合中
- 后面跟非终结符(不带空)
A->BC
B->b|ε
C->c|ε
.....
First(A)={b,c,ε}
注意:推导出b、c的情况与上面情况相同
对于ε,就当当B和C都为ε的情况推导。
Follow集合
三条规则:
- 对于开始符号,首先将$加入到Follow集中
- 若A->αBβ是一个产生式,则把First(β)-{ε}加入到Follow(B)中
- 若A->αB是一个产生式,或者A->αBβ是一个产生式且β->ε,则把Follow(A)加入到Follow(B)中
示例:
G[s]:S->aH
H->aMd
H->d
M->Ab
M->ε
A->aM
A->e
| First | Follw |
|---|---|
| First(S)={a} | Follow(S)={$} r1 |
| First(H)={a,d} | Follow(H)={$} r3 |
| First(M)={a,e,ε} | Follow(M)={d}+{b} ={d,b} r2+r3 |
| First(A)={a,e} | Follow(A)={b} r2 |
r1r2r3表示利用到的规则
1335

被折叠的 条评论
为什么被折叠?



