编译原理第4章习题解答.doc_第1页
编译原理第4章习题解答.doc_第2页
编译原理第4章习题解答.doc_第3页
编译原理第4章习题解答.doc_第4页
编译原理第4章习题解答.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章习题解答:1,2,3,4 解答 略!5. 解答:(1) (2) (3) (4) (5)(6)(7)(8)6. 解答:(1)A: B: C: D: E:(2)A: B: C: D: E:7.解答:(1) 消除给定文法中的左递归,并提取公因子:bexprbterm or bterm btermbfactor and bfactor bfactornot bfactor | (bexpr) | true |false (2) 用类C语言写出其递归分析程序:void bexpr();bterm();WHILE(lookahead =or) match (or);bterm();void bterm();bfactor();WHILE(lookahead =and)match (and);bfactor();void bfactor();if (llokahead=not) then match (not);bfactor(); else if(lookahead=() then match ();bexpr();match(); else if(lookahead =true) then match (true) else if (lookahead=false)then match (false);else error;8. 解答:消除所给文法的左递归,得G:S (L)|a L SLL ,SL |e 实现预测分析器的不含递归调用的一种有效方法是使用一张分析表和一个栈进行联合控制,下面构造预测分析表:根据文法G有:First(S) = ( , a )Follow(S) = ) , , , #First(L) = ( , a )Follow(L) = ) First(L) = ,Follow(L) = ) 按以上结果,构造预测分析表M如下:文法G是LL(1)的,因为它的LL(1)分析表不含多重定义入口。预测分析器对输入符号串(a,(a,a)做出的分析动作如下:步骤栈剩余输入串输出1#S(a,(a,a)#2#)L(a,(a,a)#S (L)3#)La,(a,a)#4#)LSa,(a,a)#L SL5#)Laa,(a,a)#S a6#)L,(a,a)#7#)LS,(a,a)#L ,SL8#)LS(a,a)#9#)L)L(a,a)#S (L)10#)L)La,a)#11#)L)LSa,a)#L SL12#)L)Laa,a)#S a13#)L)L,a)#14#)L)LS,a)#L ,SL15#)L)LSa)#16#)L)Laa)#S a17#)L)L)#18#)L)#Le19#)L)#20#)#Le21# 9. 解答:各非终结符的First集:First(S)=First(A)eFirst(B)eeb=a,b, eFirst(A)=be=b,eFirst(B)ea=a,eFirst(C)=First(A) eFirst(D)First(b) =a,b,cFirst(D)=ac=a,c各个候选式的First集为:First(AB)=a,b, e First(bC)=bFirst(e)e First(b)bFirst(aD)=a First(AD)=a,b,cFirst(b)=b First(aS)=aFirst(c)=c 各非终结符的Follow集的计算:Follow(S)=#Follow(D) =#Follow(A)=(First(B)e)Follow(S)First(D) =a,#,cFollow(B)=Follow(S) =#Follow(C)=Follow(S) =#Follow(D)=Follow(B)Follow(C) =#10解答:(1) 求First和Follow集 First(E)=First(T)=(,a,b, First(E)=+, e First(T)=First(F)=(,a,b, First(T)=(,a,b, , e First(F)=First(P)=(,a,b, First(F)=*,e First(P)=(,a,b, (计算顺序)Follow(E)= #, ) Follow(E)= Follow(E)=#,) (1)(使用的产生式)Follow(T) = First(E)eFollow(T) (1,2) = +),#=+,),#Follow(T)= Follow(T)=+,# (3)Follow(F)= First(T)eFollow(T) (3,4) = (,a,b,+ ,),#Follow(F)= Follow(F) (5) = (,a,b,+ ,),#Follow(P)= First(F)eFollow(F) (5,6) =*,(,a,b,+ ,),# (2) 证明: a. 文法不含左递归;b. 每个非终结符的各个侯选式的First集不相交;c. First(E)Follow(E)=+, e#,),=FFirst(T)Follow(T)=(,a,b, e+,)=FFirst(F)Follow(F)=*, e,a,( ,+,#= F改造后的文法满足LL(1)文法的三个条件,是LL(1)文法。(3) 预测分析表如下所示。ab*+()#EETEETEETEEE+EEeEeTTFTTFTTFTTFTTTTTTTTTTTeTeFFPFFPFFPFFPFFFeFeF*FFeFeFeFeFePPaPbPP(E)11. 解答:(1)SAbc AaeBbea. 文法不含左递归; b. S,A,B各候选式的First集不相交;c. First(A)Follow(A)=a,eb=F First(B)Follow(B)=b,eF=F该文法为LL(1)文法。(2) SAbAaBe Bbe a. 文法不含左递归;b. S,A,B各候选式的First集不相交;c. First(A)Follow(A)=a,b, eb=b F 该文法不是LL(1)文法。12. 解答: 最右推导:E=T=F=(E)=(ET)=(EF)=(Ei)= (Ti)=(T*Fi)语法树:图4.1 句型(T*Fi)的语法树 短语:(T*Fi),T*Fi,T*F,i 素短语:T*F,i最左素短语:T*F 由于E =E+T =E+T*F,故E+T*F为该文法的句型 短语:T*F、E+T*F 直接短语: T*F 句柄: T*F13. 解答:最左推导:S= (T) = (T,S) = (S,S) = (a,S) = (a,(T) = (a,(T,S) = (a,(S,S) = (a,(a,S) = (a,(a,a)最右推导:S= (T) = (T,S) = (T,(T) = (T,(T,S) = (T,(T,a) = (T,(T,a) = (T,(a,a) = (S,(a,a) = (a,(a,a)文法中S和T的FirstVT和LastVT集为:FirstVT(S)=a,( FirstVT(T)=,a, ( lastVT(S)=a, ) lastVT(T)=,a,)文法GS的算符优先关系表: 根据优先关系表,对每个终结符或#建立符号f与g,把f(和g)分成一组。根据GS的算符优先关系表,画出如下的有向图。优先函数如下:用算符优先分析法分析句子(a,(a,a)。给定的输入符号串是文法的一个句子。14. 解答:(1) 该文法的拓广文法G为 0S S1S aSAB2S BA3A aA4A B5B b其LR(0)项目集规范族和识别活前缀的DFA如下:I0 = SS, SaSAB, SBA, BbI1 = SSI2 = BbI3 = SaSAB, SaSAB, SBA, BbI4 = SBA, AaA, AB, BbI5 = SaSAB, AaA, AB, BbI6 = SaSAB, BbI7 = AaA, AaA, AB, BbI8 = ABI9 = SBAI10 = SaSABI11 = AaA显然,上述状态中没有出现冲突。显然,该文法是LR(0)的文法,因此也是SLR(1)的。 求各个非终结符的Follow集,以便构造分析表:Follow(S)=# Follow(S)=a,b,#Follow(A)=a,b,#Follow(B)=a,b,#构造的SLR(1)分析表如下: (2) 该文法的拓广文法G为 0S S 1S Sab 2S bR 3R S 4R a其LR(0)项目集规范族和识别活前缀的DFA如下:I0 = SS, SSab, SbRI1 = SS, SSabI2 = SbR, RS, Ra, SSab, SbRI3 = SSabI4 = SbRI5 = RS, SSabI6 = RaI7 = SSab显然,I1和I5存在移进-归约冲突。求S和R的Follow集: Follow(S)=# Follow(R)=Follow(S)=a,#在I5中,出现的移进归约冲突,且Follow(R)a=a,不能用SLR(1)方法解决。因此,此文法不是SLR(1)文法。15. 解答:(1) 构造其拓广文法G的产生式为 0S S1S A2A BA3A e4B aB5B b构造其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:I0 = SS, #, SA, #, ABA, #, A, #, BaB, a/b/#, Bb, a/b/# I1 = SS, #I2 = SA, #I3 = ABA, #, ABA, #, A, #,BaB, a/b/#, Bb, a/b/#I4 = Bb, a/b/# I5 = BaB, a/b/#, BaB, a/b/#, Bb, a/b/#I6 = ABA, #I7 = BaB, a/b/#该文法的LR(1)项目集规范族中没有冲突,所以该文法是LR(1)文法。构造LR(1)分析表如下:以上分析表无多的定义入口,所以该文法为LR(1)文法。(3)对于输入串abab,其分析过程如下: 16. 解答:(1) 对于产生式SAaAb|BbBa 来说First(AaAb)First(BbBa)=ab=FA,BVN仅有一条候选式。因此,这个文法是LL(1)的。(2) 下面构造这个文法的识别活前缀的DFA。I0 = SS, SAaAb, SBbBa, A, B I1 = SSI2 = SAaAbI3 = SBbBaI4 = SAaAb, AI5 = SBbBa, BI6 = SAaAbI7 = SBbBaI8 = SAaAbI9 = SBbBa由于Follow(A)=Follow(B)=a, b,因此项目集I0中存在归约-归约冲突。在I0状态下,当输入符号是a或是b时,不知用Ae还是Be进行归约。故此文法不是SLR(1)的。但是,此文法时LR(1)的。17. 解答:该文法的拓广文法G为 0S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论