作业十一
1.将以下文法消除左递归,分析符号串 i*i+i 。
并分别求FIRST集、FOLLOW集,和SELECT集
E -> E+T | T
T -> T*F | F
F -> (E) |i

2.P101练习7(2)(3)文法改写,并分别求FIRST集、FOLLOW集,和SELECT集
(2)A→aABe|a
B→Bb|d
消除左递归:
A→aA'
A'→ABe|ε
B→dB'
B'→bB'|ε
FIRST集:
FIRST(A)→{a}
FIRST(A')→{a,ε}
FIRST(B)→{d}
FIRST(B')→{b,ε}
FOLLOW集:
FOLLOW(A)→{d,#}
FOLLOW(A')→{d,#}
FOLLOW(B)→{e}
FOLLOW(B')→{e}
SELECT集:
SELECT(A→aA')={d,#}
SELECT(A'→ABe)={a}
SELECT(A'→ε)={d,#}
SELECT(B→dB')={e}
SELECT(B'→bB')={b}
SELECT(B'→ε)={e}
(3)
将A->SB代入S->Aa|b可得:S->SBa|b
消除左递归:S->bS' S'->BaS'|ε B->ab
① FIRST集:
First(SBa) = {S}
First(b) = {b}
First(bS') = {b}
First(BaS') = {B}
First(ε) = {ε}
First(ab) = {a}
② FOLLOW集:
Follow(S) = {B}
Follow(S') = {#}
Follow(B) = {a}
③ SELECT集:
Select(S->SBa) = First(SBa) = {S}
Select(S->b) = First(b) = {b}
Select(S->bS') = First(bS') = {b}
Select(S'->BaS') = First(BaS') = {B}
Select(S->ε) = First(ε) = {ε}∪Follow(S') = {#}
Select(B->ab) = First(ab) = {a}
课堂练习:
求以下文法的FIRST集、FOLLOW集和SELECT集。
S->Ap
A->a |ε
A->cA
A->aA
FIRST集:
FIRST(Ap) = { a , c , p }
FIRST(a) = { a }
FIRST(ε) = { ε }
FIRST(cA) = { c }
FIRST(aA) = { a }
FOLLOW集:
FOLLOW(A) = { p }
FOLLOW(S) = { # }
SELECT集:
SELECT(S→Ap) = FIRST(Ap) = { a , c , p }
SELECT(a) = FIRST(a) = { a }
SELECT(ε) = FOLLOW(A) = { p }
SELECT(cA) = FIRST(cA) = { c }
SELECT(aA) = FIRST(aA) = { a }
S->Ap
S->Bq
A->a
A->cA
B->b
B->dB
FIRST集:
FIRST(Ap) = { a , c }
FIRST(Bp) = { b , d }
FIRST(a) = { a }
FIRST(cA) = { c}
FIRST(b) = { b }
FIRST(dB) = { d }
FOLLOW集:
FOLLOW(S) = { # }
FOLLOW(A) = { p }
FOLLOW(B) = { q }
SELECT集:
SELECT(S->Ap) = FIRST(Ap) = { a , c }
SELECT(S->Bq) = FIRST(Bq) = { b , d }
SELECT(A->a) = FIRST(a) = { a }
SELECT(A->cA) = FIRST(cA) = { c }
SELECT(B->b) = FIRST(b) = { b }
SELECT(B->dB) = FIRST(dB) = { d }
浙公网安备 33010602011771号