编译原理第四章答案
3)
First( A' ) Follow ( A' ) {d , } {), b}
4.4(2)
见课后答案 规则见课本P66
问题?
FIRST集: * FIRST()= {a | a…, a∈ VT } 若 ε,ε∈ FIRST() FOLLOW集: FOLLOW(A)={a |S * ...Aa...,a∈VT} 若S...A,则规定 $∈FOLLOW(A)
4.2(2) LL(1)?
1) 不含左递归 2)
E→TE’ T→FT’ F→(E)|id
Follow ( E) Follow ( B) {a, c, d , f , g ,$}
A→BCc|gDB B→bCDE|ε C→DaB|ca D→dD|ε E→gAf|c
4.1(2) LL(1)?
LL(1)文法定义 一个上下文无关文法 G是LL(1)文法, 当 且仅当对 G 中每个非终结符A的任何两 个不同的规则 A→ α | β,满足 SELECT(A→ α)∩SELECT(A→β) = Φ 其中α 、β中至多只有一个能推出ε串。
B→CB'
First
Follow
S
A A' B B' C
{),(}
{),(} {i,ε} {),(} {+,ε} {),(}
{$}
{$,*} {$,*} {i,$,*} {i,$,*} {+,i,$,*}
4.3(3)预测分析表
+ S A I
S→A A→BA' A'→iBA'|ε B'→+CB'|ε C→)A*|(
4.4(1) LL(1)?
1)无左递归
2)
First (( A)) First (aAb) {(} {a} First (eA' ) First (dSA' ) {e} {d } First (dA' ) First( ) {d } { }
Select(C DaB) Select(C ca) First( DaB) Frist(ca) {a, d} {c}
Select( D dD) Select( D ) First(dD) Follow ( D) {d } {a, b, c, f , g ,$}
4.2(2) LL(1)?
左递归的消除: P→Pα|β 改为: P→βP’ P’ →αP’| ε
LL(1)文法要求: (1)文法不含左递归。 (2)对文法中的每一个非终极符 A, 若 A →α1|α2|...|αn, 则 FIRST(αi) FIRST(αj)= (3)对文法中的每一个非终极符 A,若它存在某个候选首 符集包含 ε, 则 FIRST(A) FOLLOW(A)=
E’→ε T→FT ’ T’→ε F→id
E’→ε
T’→ε
4.2(4)
规则见课本P66 见课后答案 E→TE’ T→FT’ F→(E)|id E’→+TE’|ε T’→*FT’|ε
4.3
文法G[S]: S→A A→B|AiB B→C|B+C C→)A*|( 1)改写为LL(1)文法 2)求改写后的文法的每个非终结符的First集和Follow集 3)构造相应的预测分析表
First( B) First(bCDE) { } {b, }
First(C ) First( DaB) First(ca) First( D) \ { } {a} {c} {d , a, c}
First ( D) First (dD) { } {d , }
First
E E’ T T’ F {(,id} {+,ε} {(,id} {*,ε} {(,id}
Follow
{$,)} {$,)} {+,$,)} {+,$,)} {*,+,$,)}
+ E E' T T' F T’→ε
*
( E→TE ’
)
id E→TE ’
$
E’→+T E’ T→FT’
T’→*F T’ F→(E)
3)
First( E ' ) Follow ( E ' ) {, } {$, )} First(T ' ) Follow (T ' ) {*, } {,$,)}
4.2(3) 预测分析表
E→TE’ T→FT’ F→(E)|id
E’→+TE’|ε T’→*FT’|ε
E’→+TE’|ε T’→*FT’|ε
First E E’ T T’ F {(,id} {+,ε} {(,id} {*,ε} {(,id} Follow {$,)} {$,)} {+,$,)} {+,$,)} {*,+,$,)}
First (TE ' ) First ( ) {} { } First (*FT ' ) First ( ) {*} { } First ((E )) Frist (id ) {(} {id }
B→CB'
( S→A
) S→A
*
$
A→BA' A→BA'
A'
B
A'→iB A'
B→CB' B→CB' B'→+C B'
A'→ε
A'→ε
B'
C
B'→ε
C→( C→)A*
B'→ε
B'→ε
4.4
文法G[S]: S→(A)|aAb A→eA'|dSA' A'→dA'|ε 1)LL(1)? 2)递归下降分析程序。
Select( E gAf ) Select( E c) First( gAf ) Frist(c) {g} {c}
4.2
对下面的文法G: E→TE’ E’→+TE’|ε T→FT’ T’→*FT’|ε F→(E)|id (1)计算这个文法的每个非终结符的FIRST和FOLLOW。 (2)证明这个文法是LL(1)的。 (3)构造它的预测分析表。 (4)构造它的递归下降分析程序。
4.1(2) LL(1)?
A→BCc|gDB D→dD|ε
B→bCDE|ε E→gAf|c
C→DaB|ca
Select( A BCc) Select( A gDB) First( BCc) First( gDB) {b, c, d , a} {g}
Select( B bCDE) Select( B ) First (bCDE) Follow ( B) {b} {a, c, d , f , g ,$}
First( E ) {g , c}
A→BCc|gDB B→bCDE|ε C→DaB|ca D→dD|ε E→gAf|c
4.1(1) Follow集
Follow ( A) {$, f }
Follow ( B) First(C ) Follow ( A) Follow (C ) {a, c, d } {$, f } Follow (C ) {a, c, d , f , g ,$}
4.2(1)
解: (1)FIRST和FOLLOW集如下表:
E→TE’ T→FT’ F→(E)|id
E’→+TE’|ε T’→*FT’|ε
First
E E’ T T’ F {(,id} {+,ε} {(,id} {*,ε} {(,id}
Follow
{$,)} {$,)} {+,$,)} {+,$,)} {*,+,$,)}
第四章习题
4.1 4.2 4.3: A→BCc|gDB B→bCDE|ε C→DaB|ca D→dD|ε E→gAf|c (1)FIRST集和FOLLOW集 (2)是否是LL(1)文法。
4.1(1) First集
First( A) First( BCc) First( gDB) First( B) \ { } First(C ) {g} {b} First( D) \ { } {a} First(ca) {g} {b} {d } {a} {c} {g} {a, b, c, d , g}
4.3(1)改成LL(1)文法
S→A A→BA' A'→iBA'|ε B→CB' B'→+CB'|ε C→)A*|(
S→A A→B|AiB B→C|B+C C→)A*|(
左递归的消除: P→Pα|β 改为: P→βP’ P’ →αP’| ε
4.3(2)
S→A A→BA' A'→iBA'|ε B'→+CB'|ε C→)A*|(
Follow (C) {c} First( DE) {c} {d , g , c} {c, d , g}
Follow ( D) First ( B) /{ } Follow ( A) First ( E ) {a} {b} {$, f } {g , c} {a} {a, b, c, f , g ,$}