ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:56.77KB ,
资源ID:4477580      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4477580.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理第二版第五章答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、编译原理第二版第五章答案编译原理 第二版 第五章答案第五章第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

2、,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- FIRST FOLLOW S a ( # , ) T a ( ) N , ) 对左部为N2的产生式可知:

3、 FIRST (-, S N2)=, FIRST (-)= FOLLOW (N2)=) , )= 所以文法是LL(1)的。 预测分析表 a ( ) , # S -a - -( T ) T -S N -S N -S N N - -, S N 也可由预测分析表中无多重入口判定文法是LL(1)的。 (4)对输入串(a,a)#的分析过程为:步骤 状态栈 当前字符 剩余输入串 操作 1 #S ( a,a)# S-(T) 2 #)T( ( a,a)# 匹配 3 #)T A ,a)# T-SN2 4 #)N2S A ,a)# S-a 5 #)N2a A ,a)# 匹配 6 #)N2 , a)# N2-,SN

4、2 7 #)N2S, , a)# 匹配 8 #)N2S a )# S-a 9 #)N2a a )# 匹配 10 #)N2 ) # N2- 11 #) ) # 匹配 12 # # 可见输入串(a,a)#是文法的句子。 2对下面的文法G:ETEE+E|TFTTT|FPFF* F|P(E)|a|b|(1) 计算这个文法的每个非终结符的FIRST集和FOLLOW集。(2) 证明这个文法是LL(1)的。(3) 构造它的预测分析表。(4) 构造它的预测下降分析程序【解】(1)由题意分析得可推导出的非终结符表为:各非终结符的FIRST集为:FIRST(E)= FIRST(T)=(,a,b, FIRST(E)

5、=+ =+,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)

6、= 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

7、,#,+,)(2)各产生式的SELECT集为:SELECT(ETE)=FIRST(TE)= FIRST(T)=(,a,b,SELECT(E +E)=FIRST(+E)=+SELECT(E )=(FIRST()- )FOLLOW(E)= FOLLOW(E)=#,)SELECT(TFT)=FIRST(FT)= FIRST(F)=(,a,b,SELECT(TT)=FIRST(T)= (,a,b,SELECT(T)=(FIRST()- )FOLLOW(T)= FOLLOW(T)=#,+,)SELECT(FPF)=FIRST(PF)= FIRST(P)= (,a,b,SELECT(F*F)=FIRST(

8、*F)= FIRST(P)= *SELECT(F)=(FIRST()- )FOLLOW(F)= FOLLOW(F)=(,a,b,#,+,)SELECT(P(E)=FIRST(E)=(SELECT(Pa)=FIRST(a)=aSELECT(Pb)=FIRST(b)=bSELECT(P)=FIRST()=由以上结果得相同左部产生式的SELECT交集为:SELECT(E +E) SELECT(E )= +#,)SELECT(TT) SELECT(T)= (,a,b,)#,+,)= SELECT(F*F) SELECT(F)=* (,a,b,#,+,) = SELECT(P(E)SELECT(Pa)S

9、ELECT(Pb) SELECT(P)=(ab= 相同左部产生式的SELECT集合的交集为空。这个文法是LL (1)的。(3)由以上算出的SELECT集可以构造该文法的预测分析表如下:+*()ab#ETETETETEE+ETFTFTFTFTTTTTTFPFPFPFPFF*FP(E)abvoid P() Getchar();if ch=( E(); Getchar();if ch=)Getchar();else if ch=aGetchar();else if ch=bGetchar();else error(), void F() Getchar();if ch=* F();else erro

10、r(); F(); void F() P(); F(); void T() T();(4)不妨约定:在进入一个非终结符号相应的子程序前,已读到一个单词ch:存放当前读到的单词,Getchar()为一子程序,每调用一次,完成读取一单词的任务,Error()为出错处理程序。4.证明下述文法不是LL(1)文法。S-C$C- bA|aBA-a|aC|bAAB-b|bC| aBB你能否构造一等价的文法,使其是LL(1)并给出判断过程。【解】因为SELECT(A-a)SELECT(A-aC),根据LL(1)文法的判定条件:(1)文法不含左递归(2)对于文法U的任意两个不同的规则有:Select(U) Se

11、lect(U )=一个文法若满足以上条件,称该文法G为LL(1)文法。得出该文法不是LL(1)文法。该文法含公共因子,消除后的文法为:S-C$C- bA|aBA-aA|bAAA-C|B-bB| aBBB-C|【证明】因为SELECT(C- bA) SELECT(C-aB)= SELECT(A-Aa) SELECT(A-bAA) = SELECT(A-C) SELECT(A-)=(FIRST(C)- )FOLLOW(A) 因此消除公共因子后得到文法也不是LL(1)文法。7对于一个文法若消除了左递归,提取了左公共因子后是否一定为LL(1)文法试对下面文法进行改写,并对改写后的文法进行判断。(1)A

12、-baB| 1B-Abb|a 2(2) AaABe|a 1 BBb|d 2(3) SAa|b 1ASB 2Bab 3【解】对于一个文法若消除了左递归,提取了左公因子后不一定是LL(1)文法。1题:A-baB| B-Abb|a 先改写文法为: 0) A-baB 1) A- 2) B-baBbb 3) B-bb 4) B-a 再改写文法为: 0) A-baB FIRST FOLLOW A b # B b,a #,b N b,a #,b 1) A- 2) B-bN 3) B-a 4) N-aBbb 5) N-b 预测分析表 a b # A -baB - B -a -bN N -aBbb -b 由预测

13、分析表中无多重入口判定文法是LL(1)的。2题:2将产生式1 提取左公因子后得:Aa(ABe| ) 进一步变换为文法G1:AaAAAbeABBb|d 消除(2)中的直接左递归,将BBb|d 变换为:BdB BbB |该文法最终改写成的形式为:AaAAAbe|BdB BbB |对此改写后的文法进行判断其是否是LL(1)文法。由分析得可推导出的非终结符表为:AABB否是否是各非终结符的FIRST集为:FIRST(A)=aFIRST(A)= FIRST(A)=a,FIRST(B)=d FIRST(B)=b=b,各非终结符的FOLLOW集为:FOLLOW(A)=# (FIRST(B)- )=#,dFO

14、LLOW(A)=FOLLOW(A)=#,dFOLLOW(B)= eFOLLOW(B)= FOLLOW(B) FOLLOW(B)= e各产生式的SELECT集为:SELECT(AaA)=FIRST(aA)=aSELECT(AABe)=FIRST(ABe)= FIRST(A)=aSELECT(A)=(FIRST()- )FOLLOW(A)= FOLLOW(A)= #,dSELECT(BdB )=FIRST(dB )= dSELECT(BbB)=FIRST(bB)= bSELECT(B)=(FIRST()- )FOLLOW(B)= FOLLOW(B)= e由以上结果得相同左部产生式的SELECT交集

15、为:SELECT(AABe)SELECT(A)=a#,d=SELECT(BbB) SELECT(B)= be=相同左部产生式的SELECT集合的交集为空。改写后的文法是LL (1)的。3题:该文法的非终结符S,A为间接左递归,以S,A,B为序消除一切左递归。将(1)的右部代入(2)得:AAaB|bB 消除其直接左递归得:AbBA AaB A| 此时文法变成如下形式:SAa|b (1)AbBA (2) AaB A| Bab 此文法中的(1), (2)产生式存在隐含的左公因子,消除隐含的左公因子后文法变成如下的形式:Sb S SBAa| AbBA AaB A| Bab 此形式中AbBA是不可达的产

16、生式,是多余的,所以应将其去掉。 所以文法最终改写成的形式为:Sb S SBAa| AaB A| Bab 相同左部产生式的SELECT集为:SELECT(SBAa)=aSELECT(S)=#SELECT(AaB A)=aSELECT(A)=a相同左部产生式的SELECT交集为: SELECT(SBAa)SELECT(S)=a# =SELECT(AaB A)SELECT(A)=aa 关于A的相同左部其产生式的SELECT集的交集不为空此改写后的文法不是LL(1)的。4题:S-AS|bA-SA|a该文法含间接左递归,因此运用间接左递归的算法对文法进行改写后的文法为:S-AS|bA-bAA|aAA-SAA|SELECT(S-AS) SELECT(S-b)=b,ab, 此改写后的文法不是LL(1)的。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1