《编译原理 第5章 习题与答案2.doc》由会员分享,可在线阅读,更多相关《编译原理 第5章 习题与答案2.doc(22页珍藏版)》请在金锄头文库上搜索。
1、第五章 习题5-1 设有文法GS: SA/ AaAAS/(1) 找出部分符号序偶间的简单优先关系。(2) 验证GS不是简单优先文法。 5-2 对于算符文法GS:SE EE-TT TT*FF F-PP P(E)i(1) 找出部分终结符号序偶间的算符优先关系。(2) 验证GS不是算符优先文法。5-3 设有文法GE:EE1 E1E1+T1|T1 T1T TT*F|F F(E)|i 其相应的简单优先矩阵如题图5-3所示,试给出对符号串(i+i)进行简单优先分析的过程。题图5-3 文法GE的简单优先矩阵5-4 设有文法GE:EE+T|TTT*F|FF(E)|i其相应的算符优先矩阵如题图5-4所示。试给出
2、对符号串(i+i)进行算符优先分析的过程。(i*+)#(i*+)#题图5-4 文法GE的算符优先矩阵5-5 对于下列的文法,试分别构造识别其全部可归前缀的DFA和LR(0)分析表,并判断哪些是LR(0)文法。(1) SaSbaScab(2) SaSSbaSSSc(3) SA AAba5-6 下列文法是否是SLR(1)文法?若是,构造相应的SLR(1)分析表,若不是,则阐明其理由。(1) SSabbR RSa(2) SaSABBA AaAB Bb(3) SaAbB AcAd BcBdd5-7 对如下的文法分别构造LR(0)及SLR(1)分析表,并比较两者的异同。 ScAdb AASca 5-8
3、对于文法GS:SA ABA BaBb (1) 构造LR(1)分析表;(2) 给出用LR(1)分析表对输入符号串abab的分析过程。5-9 对于如下的文法,构造LR(1)项目集族,并判断它们是否为LR(1)文法。 (1) SA AAB BaBb (2) SaSaa第5章 习题答案2 5-1 解:(1) 由文法的产生式和如答案图5-1(a)所示的句型Aa的语法树,可得G中的部分优先关系如答案图5-1(b)所示。(2) 由答案图5-1(b)可知,在符号A和/之间,即存在等于关系,又存在低于关系,故文法GS不是简单优先文法。 5-2 解:(1) 由文法GS的产生式可直接看出:( )此外,再考察句型P(
4、E)和i*(T*F)的语法树 (见答案图5-2(a)及(b)。由答案图5-2(a)可得: , , ( 由答案图5-2(b)可得: i * , * ( , ( * , * ) (2) 由答案图5-2(a)可知,在终结符号和之间,存在两种算符优先关系: , 故文法GS不是算符优先文法。5-3 解:对符号串(i+i)进行简单优先分析的过程如答案表5-3所示。因为分析成功,所以符号串(i+i)是文法GE的合法句子。答案表5-3 符号串(i+i)的简单优先分析过程步骤分析栈关系当前符号余留输入串句柄所用产生式0#低于(i+i)# 1#(低于i+i)# 2#(i优于+i)# iFi3#(F优于+i)# F
5、TF4#(T优于+i)# TT1T5#(T1优于+i)# T1E1T16#(E1等于+i)# 7#(E1+低于i)# 8#(E1+i优于)# iFi9#(E1+F优于)# FTF10#(E1+T优于)# TT1T 11#(E1+T1优于)# E1+T1E1E1+T1 12#(E1优于)# E1EE1 13#(E等于)# 14#(E)优于#(E)F(E) 15#F优于#FTF16#T优于#TT1T17#T1优于#T1E1T1 18#E1优于#E1EE1 19#E优于#分析成功5-4 解:对符号串(i+i)进行算符优先分析的过程如答案表5-4所示。 因为分析成功,所以符号串(i+i)是文法GE的合
6、法句子。句子(i+i)及其分析过程中所得句型的语法树如答案图5-4所示。答案表5-4 符号串(i+i)的算符优先分析过程步骤分析栈当前栈顶终结符号优先关系当前输入符号余留输入串最左素短语0#(i+i)# 1#((i+i)# 2#(ii+i)# i3#(F(+i)# 4#(F+i)# 5#(F+ii)# i6#(F+F+)# F+F7#(E()# 8#(E)#(E) 9#F#分析成功 5-5 解:(1) 在文法GS中引入一个新的开始符号S,且将SS作为第0个产生式添加到文法G中,从而得到G的拓广文法GS:0.SS 2.SaSc1.SaSb 3.Sab识别文法GS全部可归前缀的DFA如答案图5-5
7、-(1)所示。因为文法GS的每个LR(0)项目集中都不含冲突项目,所以文法GS是LR(0)文法,故可构造出不含冲突动作的LR(0)分析表如答案表5-5-(1)所示。答案表5-5-(1) 文法GS的LR(0)分析表状态ACTIONGOTOabc#S0123456s2 s2 r3 r1r2 s4s5r3r1 r2s6r3r1r2accr3r1r213(2) 在文法GS中引入一个新的开始符号S,且将SS作为第0个产生式添加到文法G中,从而得到G的拓广文法GS:0.SS 2.SaSSS1.SaSSb 3.Sc识别文法GS全部可归前缀的DFA如答案图5-5-(2)所示。因为文法GS的每个LR(0)项目集
8、中都不含冲突项目,所以文法GS是LR(0)文法,故可构造出不含冲突动作的LR(0)分析表如答案表5-5-(2)所示。答案表5-5-(2) 文法GS的LR(0)分析表状态ACTIONGOTOabc#S01234567s2 s2 r3s2 s2r1r2 r3r1 r2s3s3 r3s3s3r1r2accr3r1r21457(3) 在文法GS中引入一个新的开始符号S,且将SS作为第0个产生式添加到文法G中,从而得到G的拓广文法GS:0.SS 2.AAb1.SA 3.Aa识别文法GS全部可归前缀的DFA如答案图5-5-(3)所示。因为在LR(0)项目集I2中含有移进-归约冲突项目,所以文法GS不是LR
9、(0)文法,故构造出的LR(0)分析表中含有冲突动作。文法GS的LR(0)分析表如答案表5-5-(3)所示。答案表5-5-(3) 文法GS的LR(0)分析表状态ACTIONGOTOab#SA01234s3 r1 r3r2 s4 ,r1r3r2accr1 r3r212 5-6 解:(1) 在文法GS中引入一个新的开始符号S,且将SS作为第0个产生式添加到文法G中,从而得到G的拓广文法GS:0.SS 3.RS1.SSab 4.Ra2. SbR识别文法GS全部可归前缀的DFA如答案图5-6-(1)所示。由答案图5-6-(1)可知,在项目集I1 和I4中都存在“移进-归约”冲突。在项目集I4 = RS
10、, SSab 中, 由于FOLLOR(R)=a,FOLLOR(R)a=a,所以其项目集的“移进-归约”冲突不可能通过SLR(1)规则得到解决,从而该文法不是SLR(1)文法。(2) 在文法GS中引入一个新的开始符号S,且将SS作为第0个产生式添加到文法G中,从而得到G的拓广文法GS:0.SS 3.AaA1.SaSAB 4.AB2.SBA 5.Bb识别文法GS全部可归前缀的DFA如答案图5-6-(2)所示。答案图5-6-(2) 识别GS全部可归前缀的DFA因为文法GS的每个LR(0)项目集中都不含冲突项目,所以文法GS是LR(0)文法,故也是SLR(1)文法。因为FOLLOW(S)=a,b,#, FOLLOW(A)=a,b,#, FOLLOW(B)=a,b,#, 所以文法GS的SLR(1)分析表如答案表5-6-(2)所示。答案表5-6-(2) 文法GS的SLR(1)分析表状态ACTIONGOTOab#SAB01234567