First/Follow/Firstvt/Lastvt 集合

设文法 G

G=(VT,VN,S,P)VNVTS,PG = (V_T,V_N,S,P) \\ V_N为非空有限的终结符号集 \\ V_T为非空有限的终结符号集 \\ S为文法的开始符号或识别符号,代表语言最终要得到的语法范畴 \\ P为产生式规则 \\

2 型文法(上下文无关文法)

设文法 G,对 P 中的每个产生式限制形如

AαA \to \alpha

其中,AVN,α(VTVN)A \in V_N, \alpha \in (V_T \cup V_N)^*则称文法 G 为 2 型文法。

First 集合

设 G 为上下文无关文法,则

FIRST(A)={αAα...,αVT}FIRST(A) = \{\alpha | A \Rightarrow \alpha...,\alpha \in V_T\}

理解

First(A)集合是以 A 为开始符的集合,A 所有能够推导出的终结符或ε\varepsilon

A->aB|ε\varepsilon

A->c

First(A) = {a,ϵ\epsilon,c}

A->Ba

B->b

First(A) = {b}

A->Bc

B->b|ϵ\epsilon

First(A) = {b,c, ϵ\epsilon}

A->BC

B->b|ϵ\epsilon

C->c|ϵ\epsilon

First(A) = {b,c,ϵ\epsilon}

  • 对于文法的开始符号 S, 置#于 Follow(S)中
  • AαBβA\to \alpha B \beta是一个产生式,则Follow(B)Follow(B)+= (First(β){ε})(First(\beta) - \{\varepsilon\})
  • AαBA\to \alpha B是一个产生式,则 Follow(B)Follow(B) += Follow(A)Follow(A)
  • AαBβA\to\alpha B \beta是一个产生式,且βε\beta \to \varepsilon,则Follow(B)Follow(B) += Follow(A)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§-{ϵ\epsilon} = {else}

Follow(S) =

Follow(T) += Follow(B) - {ϵ\epsilon}

Follow()

消除直接左递归

AAαβA\to A\alpha|\beta

其中αβ(VTVN)\alpha、\beta\in(V_T\cup V_N)^*β\beta不以 A 打头

则可改写为如下形式

AβAA\to\beta A'

AαAεA'\to \alpha A'|\varepsilon

FIRSTVT(T)集合

非终结符 T 的最左终结符集合

  1. 若产生式TαTRα...T\to \alpha或T\to R\alpha...αFIRSTVT(T)\alpha \in FIRSTVT(T)
  2. TR...FIRSTVT(R)FIRSTVT(T)T\to R...,则FIRSTVT(R)\subseteq FIRSTVT(T)

LASTVT(T)集合

非终结符 T 的最右终结符集合

  1. 若产生式T...αT...aRαLASTVT(T)T\to...\alpha或T\to...aR,则\alpha \in LASTVT(T)
  2. T...RT\to ...RLASTVT(R)LASTVT(T)LASTVT(R)\subseteq LASTVT(T)

(未完待续)