1、蒋立源编译原理第三版第四章习题与答案docx第五章习题5-1设有文法GS :SA/AaA AS/(1)找出部分符号序偶间的简单优先关系。(2)验证 GS 不是简单优先文法。5-2 对于算符文法 GS :SE E E-T T T T*FF F -PP P (E) i(1)找出部分终结符号序偶间的算符优先关系。(2)验证 GS 不是算符优先文法。5-3 设有文法GE :EEEE+T |T1T TTT*F|FF(E)|i11111其相应的简单优先矩阵如题图5-3所示,试给出对符号串(i+i )进行简单优先分析的过程。题图 5-3 文法 G E 的简单优先矩阵5-4 设有文法 GE :EE+T|TTT
2、*F|FF(E)|i其相应的算符优先矩阵如题图 5-4 所示。试给出对符号串( i+i )进行算符优先分析的过程。(i*+)#(i*+)#题图 5-4文法 GE 的算符优先矩阵5-5 对于下列的文法, 试分别构造识别其全部可归前缀的 DFA和 LR(0) 分析表,并判断哪些是 LR(0) 文法。(1)S aSb aSc ab(2)S aSSb aSSSc(3)S AAAb a5-6 下列文法是否是 SLR(1)文法?若是,构造相应的 SLR(1) 分析表,若不是,则阐明其理由。(1) S Sab bR R Sa(2) S aSAB BA A aA B B b(3) S aAbB A cAd B
3、 cBdd5-7 对如下的文法分别构造 LR(0) 及 SLR(1) 分析表,并比较两者的异同。S cAd b A ASca5-8 对于文法 GS:SA A BA B aB b(1)构造 LR(1) 分析表;(2) 给出用 LR(1) 分析表对输入符号串 abab 的分析过程。5-9 对于如下的文法,构造 LR(1) 项目集族,并判断它们是否为 LR(1) 文法。(1) S A A AB B aB b(2) S aSa a第 4 章 习题答案 25-1 解:(1) 由文法的产生式和如答案图 5-1(a) 所示的句型 A a的语法树,可得 G中的部分优先关系如答案图 5-1(b) 所示。(2)由
4、答案图 5-1(b) 可知,在符号 A 和/ 之间,即存在等于关系, 又存在低于关系,故文法 GS 不是简单优先文法。5-2 解:(1)由文法 GS 的产生式可直接看出:(= )此外,再考察句型 P (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 所示。因为分析成功,
5、所以符号串 (i+i) 是文法 G E 的合法句子。答案表 5-3符号串 (i+i)的简单优先分析过程当前余留所用步骤分析栈关系符号输入串句柄产生式0#低于(i+i)#1#(低于i+i)#2#(i优于+i)#iF i3#(F优于+i)#FT F4#(T优于+i)#TT1T5#(T 1优于+i)#T1E1 T16#(E1等于+i)#7#(E1+低于i)#8#(E1+i优于)#iF i9#(E1+F优于)#FT F10#(E1+T优于)#TT1T11#(E1+T优于)#E+TE E +T11111112#(E1优于)#E1E E113#(E等于)#14#(E)优于#(E)F (E)15#F优于#F
6、T F16#T优于#TT1T17#T1优于#T1E1 T118#E优于#EE E11119#E#分析优于成功5-4 解:对符号串 (i+i)因为分析成功,所以符号串进行算符优先分析的过程如答案表(i+i) 是文法 GE 的合法句子。5-4所示。句子 (i+i) 及其分析过程中所得句型的语法树如答案图 5-4 所示。答案表 5-4符号串( i+i)的算符优先分析过程当前栈顶优先当前输余留最左步骤分析栈终结符号关系入符号输入串素短语0#(i+i)#1# ((i+i)#2# ( ii+i)#i 3# (F(+i)#4# ( F+i)# 5# ( F+ ii)#i6# ( F+F+)#F+F 7# (
7、E()#8# ( E)#(E) 9#F#分析成功5-5解:(1)在文法 GS 中引入一个新的开始符号S,且将 S S 作为第 0 个产生式添加到文法 G中,从而得到 G的拓广文法 GS : S aScaSb ab识别文法 GS 全部可归前缀的 DFA如答案图 5-5-(1) 所示。因为文法 GS 的每个 LR(0) 项目集中都不含冲突项目, 所以文法 GS 是 LR(0) 文法,故可构造出不含冲突动作的 LR(0) 分析表如答案表 5-5-(1) 所示。答案表 5-5-(1)文法 GS 的 LR(0) 分析表ACTIONGOTO状态abc#S0s211acc2s2s433s5s64r 3r 3
8、r 3r 35r 1r 1r 1r 16r 2r 2r 2r 2(2) 在文法 GS 中引入一个新的开始符号 S,且将 S S 作为第 0 个产生式添加到文法 G中,从而得到 G的拓广文法 GS : S aSSSaSSb c识别文法 GS 全部可归前缀的 DFA如答案图 5-5-(2) 所示。因为文法 GS 的每个 LR(0) 项目集中都不含冲突项目, 所以文法 GS 是 LR(0) 文法,故可构造出不含冲突动作的 LR(0) 分析表如答案表 5-5-(2) 所示。答案表 5-5-(2)文法 GS 的 LR(0)分析表状态ACTIONGOTOabc#S0s2s311acc2s2s343r 3r
9、 3r 3r 34s2s355s2s376r 1r 1r 1r 17r 2r 2r 2r 2(3) 在文法 GS 中引入一个新的开始符号 S,且将加到文法 G中,从而得到 G的拓广文法 GS : S AbA a识别文法 GS 全部可归前缀的 DFA如答案图 5-5-(3)S S 作为第所示。0 个产生式添因为在 LR(0) 项目集 I 2 中含有移进 - 归约冲突项目, 所以文法 GS 不是 LR(0) 文法,故构造出的LR(0) 分析表中含有冲突动作。文法 GS 的 LR(0) 分析表如答案表5-5-(3)所示。答案表 5-5-(3)文法 GS 的 LR(0) 分析表状态ACTIONGOTO
10、ab#SA0s3121acc2r 1s4 ,r 1r 13r 3r 3r 34r 2r 2r 25-6 解:(1) 在文法 GS 中引入一个新的开始符号 S,且将 S S 作为第 0 个产生式添加到文法G中,从而得到 SSabG的拓广文法 GS :Sa2. SbR识别文法 GS 全部可归前缀的 DFA如答案图 5-6-(1) 所示。由答案图 5-6-(1) 可知,在项目集 I 1 和 I 4 中都存在“移进 - 归约”冲突。在项目集I 4 = R S, S Sab 中 , 由于 FOLLOR(R)=a,FOLLOR(R) a=a ?,所以其项目集的“移进 - 归约”冲突不可能通过 SLR(1)
11、规则得到解决, 从而该文法不是 SLR(1) 文法。(2) 在文法GS 中引入一个新的开始符号S,且将S S 作为第0 个产生式添加到文法G中,从而得到G的拓广文法GS :识别文法 SaSABBAGS 全部可归前缀的 aA B bDFA如答案图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-
12、6-(2) 所示。所以文法答案表 5-6-(2) 文法 GS 的 SLR(1) 分析表状态 ACTION GOTOab#SAB0s2s4131acc2s2s4533s7s4684r 5r 5r 55s7s4986r 2r 2r 27s7s41188r 4r 4r 49s41010r 1r 1r 111r 3r 3r 3(3) 在文法 GS 中引入一个新的开始符号 S,且将 S S 作为第 0 个产生式添加到文法 G中,从而得到 G的拓广文法 GS : S aA cBddbB 3. A cAd识别文法 GS 全部可归前缀的 DFA如答案图 5-6-(3) 所示。由答案图 5-6-(3) 可知,在
13、项目集 I 2 ,I 3 ,I 5 和 I 9 中都存在“移进 - 归约”冲突。因为在项目集 I 2 和 I 5 中 , 由于 FOLLOR(A)=d,# ,FOLLOR(A)c=? ,所以其项目集的“移进 - 归约”冲突能通过 SLR(1)规则得到解决;又因为在项目集 I 3 和 I 9 中, 由于 FOLLOR(B)=d,# ,FOLLOR(B)c=? ,所以其项目集的“移进 - 归约”冲突也能通过 SLR(1) 规则得到解决;所以文法 GS 是 SLR(1)文法。因为 FOLLOR(S)=#,FOLLOR(A)=d,# ,FOLLOR(B)=d,# ,所以文法 GS 的 SLR(1)分析
14、表如答案表 5-6-(3) 所示。答案表 5-6-(3)文法状态ACTIONabcd0s2s312s5r 43s9r 645s5r 46s77r 389s9r 610s1111s1212r 5GS 的 SLR(1) 分析表GOTO#SAB1accr 44r 68r 1r 46r 3r 2r 610r 55-7 解:在文法 GS 中引入一个新的开始符号 S,且将 S S 作为第 0 个产生式添加到文法 G中,从而得到 G的拓广文法 G S : S ASccAd ab识别文法 GS 全部可归前缀的 DFA如答案图 5-7 所示。因为文法 GS 的每个 LR(0) 项目集中都不含冲突项目, 所以文法
15、 GS 是 LR(0) 文法。文法 GS 的 LR(0) 分析表如答案表 5-7-(a) 所示。答案表 5-7-(a)文法 GS 的 LR(0) 分析表ACTIONGOTO状态abcd#SA0s3s211acc2s453r 2r 2r 2r 2r 24r 4r 4r 4r 4r 45s3s2s676r 1r 1r 1r 1r 17s88r 3r 3r 3r 3r 3因为 FOLLOR(S)=#,c , FOLLOR(A)=b,c,d ,所以文法 GS 的 SLR(1) 分析表如答案表 5-7-(b) 所示。答案表 5-7-(b)文法 GS 的 SLR(1) 分析表ACTIONGOTO状态abc
16、d#SA0s3s211acc2s453r 2r 24r 4r4r 45s3s2s676r 1r 17s88r 3r 3r 3两个表的相同之处为:(1)两个表的 GOTO表部分完全相同。(2)在两个表的 ACTION表中,不含归约项目的项目集对应的行的元素完全相同,即第 0,2,5,7 行完全相同。两个表的不同之处为:在两个表的 ACTION 表中,含有归约项目的项目集对应的行的元素不同,即第3,4,6,8 行的元素不同。以第 3 行为例,答案表 5-7-(a) 中的所有元素都为 r 2 ;而在答案表 5-7-(b) 中 , 因为 FOLLOR(S)=#,c ,故仅在“ #”和“ c”列对应的元
17、素为 r 2 。5-8(1)加到文法文法解:在文法 GS 中引入一个新的开始符号 S,且将G中,从而得到 G的拓广文法 GS : S A aBBA bGS 的 LR(1) 项目集及 DFA如答案图 5-8 所示。S S 作为第0 个产生式添文法 GS 的 LR(1) 分析表如答案表 5-8-(1) 所示。答案表 5-8-(1)文法 GS 的 LR(1) 分析表状态ACTIONGOTOab#SAB0s4s5r 31231acc2r 13s4s5r 3634s4s575r 5r 5r 56r 27r 4r 4r 4(2) 用 LR(1) 分析表对输入符号串 abab 的分析过程如答案表 5-8-(2) 所示。因为分析成功,所以符号串 abab 是文法 GS 的合法句子。答案表 5-8-(2)符号串 abab 的 LR分析过程步骤状态栈符号栈余留输入串分析动作下一状态1I0#abab#s442I I4#abab#s5503I0I4I5#abab#r 5GOTOI4 ,B=74I0I4I7#aBab#r 4GOTOI0 ,B=35I0I3#Bab#s446III4#Bab#s55037I II I5#Bab#r5GOTOI ,B=703448I0I3I4I 7#BaB#r 4GOTOI
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1