First/Follow/Firstvt/Lastvt 集合
设文法 G
G=(VT,VN,S,P)VN为非空有限的终结符号集VT为非空有限的终结符号集S为文法的开始符号或识别符号,代表语言最终要得到的语法范畴P为产生式规则
2 型文法(上下文无关文法)
设文法 G,对 P 中的每个产生式限制形如
A→α
其中,A∈VN,α∈(VT∪VN)∗则称文法 G 为 2 型文法。
First 集合
设 G 为上下文无关文法,则
FIRST(A)={α∣A⇒α...,α∈VT}
理解
First(A)集合是以 A 为开始符的集合,A 所有能够推导出的终结符或ε
A->aB|ε
A->c
First(A) = {a,ϵ,c}
A->Ba
B->b
First(A) = {b}
A->Bc
B->b|ϵ
First(A) = {b,c, ϵ}
A->BC
B->b|ϵ
C->c|ϵ
First(A) = {b,c,ϵ}
- 对于文法的开始符号 S, 置#于 Follow(S)中
- 若A→αBβ是一个产生式,则Follow(B)+= (First(β)−{ε})
- 若A→αB是一个产生式,则 Follow(B) += Follow(A)
- 若A→αBβ是一个产生式,且β→ε,则Follow(B) += Follow(A)
综合例题一
1 2 3 4 5 6 7
| G(S): S->IETSP|O I->if E->b O->other L->else T->then P->LS|ε
|
First |
Follow |
First(S) = {if,other} |
Follow(S) = |
Follow(S) += First§-{ϵ} = {else}
Follow(S) =
Follow(T) += Follow(B) - {ϵ}
Follow()
消除直接左递归
A→Aα∣β
其中α、β∈(VT∪VN)∗,β不以 A 打头
则可改写为如下形式
A→βA′
A′→αA′∣ε
FIRSTVT(T)集合
非终结符 T 的最左终结符集合
- 若产生式T→α或T→Rα...则α∈FIRSTVT(T)
- 若T→R...,则FIRSTVT(R)⊆FIRSTVT(T)
LASTVT(T)集合
非终结符 T 的最右终结符集合
- 若产生式T→...α或T→...aR,则α∈LASTVT(T)
- 若T→...R则LASTVT(R)⊆LASTVT(T)
(未完待续)