编译原理第二版第五章答案.docxVIP

  • 29
  • 0
  • 约5.9千字
  • 约 13页
  • 2021-03-21 发布于天津
  • 举报
第五章 第5章自顶向下语法分析方法 练习(P99) 1?文法 S-aL|仃) T-T,S|S (1)对(a,(a,a)和(((a,a)A(a)),a)的最左推导。 经改写后的文法是否为LL (1)的给岀它的预测分析表。 给岀输入串(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),A,S),S) =(((a,a),(T)),S) =(((a,a)A (S)),S) =(((a,a),~(a)),S) =(((a,a),a)),a) (3)改写文法为: 0) S-a S3 S-( T ) T-S N N-, S N N-e FIRST FOLLOW S a A ( # ,) T a A ( ) N / € ) 对左部为N2的产生式可知: FIRST (-z S N2) ={, } FIRST (-e) ={e} FOLLOW (N2) ={)} {,}C { )}=0 所以文法是LL⑴的。 预测分析表 a A ( % ) / # s -a -A -(T) -SN -SN -SN T N ? ,SN 也可由预测分析表中无多重入口判左文法是LL⑴的。 ⑷对输入串(可a) #的分析过程为: 步骤 状态栈 当前字符 剩余输入串 操作 1 #s ( a,a)# S-(T) 2 #)T( ( a,a)# 匹配 3 #)T A ,a)# T-SN2 4 #)N2S ,a)# A 5 #)N2a A ,a)# 匹配 6 #)N2 ) f a)# N2-,SN2 7 #)N2S, f a)# 匹配 8 #)N2S A a )# 9 #)N2a a )# 匹配 10 #)N2 ) # N2-e 11 #) ) # 匹配 12 # # 可见输入串(a,a) #是文法的句子。 2.对下而的文法G: ETTE ET+E|w TTFT TTT|w ftpf ) ft fje PT(E)|a|bL (1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。 ⑵证明这个文法是LL⑴的。 构造它的预测分析表。 构造它的预测下降分析程序 【解】(1)由题意分析得可推导出w的非终结符表为: 各非终结符的FIRST集为: FIRST(E)= FIRST(T)={(, a, b, A} FIRST(E*)={+}U{ e}={+, e} FIRST(T)= FIRST(F)={(, a, b, A} FIRST(r)= FIRST(T) U{ e}={(, a, b,竹 e} FIRST(F)= FIRST(P)二{(, a, b, A} FIRST(FZ)={*}U{ e}=f, e} FIRST(P)二{(, a b, A} ???最终求得各非终结符的FIRST集为: FIRST(E)二{(, a, b, A} FIRST(E{+, e} FIRST(T)二{(, a, b, A} FIRST(T)二{(, a, b,人,e} FIRST(F)二{(, a, b, A} FIRST(F{*, e} FIRST(P)二{(, a, b, A} 各非终结符的FOLLOW集为: FOLLOW(E)={#}UFOLLOW(Ef) U{ )} FOLLOW(EZ)= FOLLOW(E) ( FOLLOW(T)= FOLLOWff) U(FIRST(E{ e}) U FOLLOW(E) FOLLOW仃X FOLLOW(T) FOLLOW(F)= (FIRST(T{ e}) U FOLLOW(T) FOLLOW(F FOLLOW(F) UFOLLOW(F) FOLLOW(P)= (FIRST(F{ e}) U FOLLOW(F) ???最终求得各非终结符的FOLLOW集为: FOLLOW(E)={#, )} FOLLOW(E/)= {#, )} FOLLOW(T)= {#, + , ) } FOLLOW(F)二{#, + , )} FOLLOW(F)= {(, a, b, A, #, +, )} FOLLOW(F)二{(, a, b, #, +, )} FOLLOW(P)= {* (, s b,八,#, +, )}

文档评论(0)

1亿VIP精品文档

相关文档