好文档 - 专业文书写作范文服务资料分享网站

最新编译原理 第二版 第五章答案资料

天下 分享 时间: 加入收藏 我要投稿 点赞

精品文档

第五章

第5章自顶向下语法分析方法

练习(P99) 1.文法 S->a|^|(T) T->T,S|S

(1) 对(a,(a,a)和(((a,a),^,(a)),a)的最左推导。

(3)经改写后的文法是否为LL(1)的?给出它的预测分析表。 (4)给出输入串(a,a)#的分析过程,并说明该串是否为G的句子。 (1) 对(a,(a,a)的最左推导为: S=>(T)

=>(T,S) =>(S,S) =>(a,S) =>(a,(T)) =>(a,(T,S)) =>(a,(S,S)) =>(a,(a,S)) =>(a,(a,a))

对(((a,a),^,(a)),a) 的最左推导为:

S=>(T) =>(T,S) =>(S,S) =>((T),S) =>((T,S),S) =>((T,S,S),S) =>((S,S,S),S) =>(((T),S,S),S) =>(((T,S),S,S),S) =>(((S,S),S,S),S) =>(((a,S),S,S),S) =>(((a,a),S,S),S) =>(((a,a),^,S),S) =>(((a,a),^,(T)),S) =>(((a,a),^,(S)),S) =>(((a,a),^,(a)),S) =>(((a,a),^,(a)),a) (3)改写文法为: 0) S->a 1) S->^ 2) S->( T ) 3) T->S N 4) N->, S N 5) N->ε

S T FIRST a ^ ( a ^ ( FOLLOW # , ) ) 精品文档

精品文档

N

, ε ) 对左部为N2的产生式可知: FIRST (->, S N2)={,} FIRST (->ε)={ε} FOLLOW (N2)={)} {,}∩ { )}=? 所以文法是LL(1)的。

预测分析表 S T N

也可由预测分析表中无多重入口判定文法是LL(1)的。 (4)对输入串(a,a)#的分析过程为:

a ->a ->S N ^ ->^ ->S N ( ->( T ) ->S N ) ->ε , ->, S N #

步骤 1 2 3 4 5 6 7 8 9 10 11 12 状态栈 #S #)T( #)T #)N2S #)N2a #)N2 #)N2S, #)N2S #)N2a #)N2 #) # 当前字符 ( ( A A A , , a a ) ) # 剩余输入串 操作 a,a)# a,a)# ,a)# ,a)# ,a)# a)# a)# )# )# # # S->(T) 匹配 T->SN2 S->a 匹配 N2->,SN2 匹配 S->a 匹配 N2->ε 匹配 精品文档

精品文档

可见输入串(a,a)#是文法的句子。 2.对下面的文法G: E→TE′ E′→+E|ε T→FT′ T′→T|ε F→PF′ F′→* F′|ε P→(E)|a|b|^

(1) 计算这个文法的每个非终结符的FIRST集和FOLLOW集。 (2) 证明这个文法是LL(1)的。 (3) 构造它的预测分析表。 (4) 构造它的预测下降分析程序

【解】(1)由题意分析得可推导出ε的非终结符表为: 各非终结符的FIRST集为:

FIRST(E)= FIRST(T)={(,a,b,^} FIRST(E′)={+}∪{ ε}={+,ε} FIRST(T)= FIRST(F)={(,a,b,^}

FIRST(T′)= FIRST(T) ∪{ ε}={(,a,b,^,ε}

FIRST(F)= FIRST(P)={(,a,b,^} FIRST(F′)={*}∪{ ε}={*,ε} FIRST(P)={(,a,b,^}

∴最终求得各非终结符的FIRST集为:

FIRST(E)={(,a,b,^} FIRST(E′)={+,ε} FIRST(T)={(,a,b,^} FIRST(T′)= {(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F′)={*,ε} FIRST(P)={(,a,b,^} 各非终结符的FOLLOW集为: FOLLOW(E)={#}∪FOLLOW(E′) ∪{ )} FOLLOW(E′)= FOLLOW(E)

FOLLOW(T)= FOLLOW(T′) ∪(FIRST(E′)-{ ε})∪FOLLOW(E) FOLLOW(T′)= FOLLOW(T)

FOLLOW(F)= (FIRST(T′)-{ ε})∪FOLLOW(T) FOLLOW(F′)= FOLLOW(F) ∪FOLLOW(F′)

精品文档

精品文档

FOLLOW(P)= (FIRST(F′)-{ ε})∪FOLLOW(F) ∴最终求得各非终结符的FOLLOW集为:

FOLLOW(E)={#,)} FOLLOW(E′)= {#,)} FOLLOW(T)= {#, + , ) } FOLLOW(T′)= {#, + ,)} FOLLOW(F)= {(,a,b,^,#,+,)}

FOLLOW(F′)= {(,a,b,^,#,+,)} FOLLOW(P)= {*,(,a,b,^,#,+,)} (2)各产生式的SELECT集为:

SELECT(E→TE′)=FIRST(TE′)= FIRST(T)={(,a,b,^} SELECT(E ′→+E)=FIRST(+E)={+}

SELECT(E ′→ε)=(FIRST(ε)-{ ε})∪FOLLOW(E′)= FOLLOW(E′)={#,)} SELECT(T→FT′)=FIRST(FT′)= FIRST(F)={(,a,b,^} SELECT(T′→T)=FIRST(T)= {(,a,b,^}

SELECT(T′→ε)=(FIRST(ε)-{ ε})∪FOLLOW(T′)= FOLLOW(T′)={#,+,)} SELECT(F→PF′)=FIRST(PF′)= FIRST(P)= {(,a,b,^} SELECT(F′→*F′)=FIRST(*F′)= FIRST(P)= {*}

SELECT(F′→ε)=(FIRST(ε)-{ ε})∪FOLLOW(F′)= FOLLOW(F′)={(,a,b,^,#,+,)} SELECT(P→(E))=FIRST((E))={(} SELECT(P→a)=FIRST(a)={a} SELECT(P→b)=FIRST(b)={b} SELECT(P→^)=FIRST(^)={^}

∴由以上结果得相同左部产生式的SELECT交集为: SELECT(E ′→+E) ∩SELECT(E ′→ε)= {+}∩{#,)}

SELECT(T′→T) ∩SELECT(T′→ε)= {(,a,b,^)∩{#,+,)}= Φ SELECT(F′→*F′) ∩SELECT(F′→ε)={*} ∩{(,a,b,^,#,+,)} = Φ

SELECT(P→(E))∩SELECT(P→a)∩SELECT(P→b) ∩SELECT(P→^)={(}∩{a}∩{b}∩{^}= Φ ∴相同左部产生式的SELECT集合的交集为空。 ∴这个文法是LL (1)的。

(3)由以上算出的SELECT集可以构造该文法的预测分析表如下: E E′ T + →+E * ( →TE′ →FT′ ) →ε a →TE′ →FT′ b →TE′ →FT′ ^ →TE′ →FT′ # →ε 精品文档

精品文档

T′ F F′ P →ε →ε →*F′ →T →PF′ →ε →(E) →ε →ε →T →PF′ →ε →a →T →PF′ →ε →b →T →PF′ →ε →^ →ε →ε 精品文档

void P() { Getchar(); if ch=’(’ { E(); Getchar();if ch=’)’Getchar();} else if ch=’a’ Getchar(); else if ch=’b’ Getchar(); else error(), } } void F’() { Getchar(); if ch=’*’ F’(); else error(); } F’(); }

最新编译原理 第二版 第五章答案资料

精品文档第五章第5章自顶向下语法分析方法练习(P99)1.文法S->a|^|(T)T->T,S|S(1)对(a,(a,a)和(((a,a),^,(a)),a)的最左推导。(3)经改写后的文法是否为LL(1)的?给出它的预测分析表。(4)给出输入串(a,a)#的分析过程,并说明该串是否为G的句子
推荐度:
点击下载文档文档为doc格式
17f5758q8f6b8ve00zsa83uyx967u500ve9
领取福利

微信扫码领取福利

微信扫码分享