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:EE 1 E1E 1+T1|T1 T1T TT*F|F F(E)|i 其相应的简单优先矩阵如题图 5-3 所示,试给出对符号串(i+i)进行简单优先分析的过程。= = = = E E1 T1 T F + * ( ) i EE1T1TF+*()i 题图 5-3 文法 GE的简单优先矩
2、阵5-4 设有文法 GE:EE+T|TTT*F|FF(E)|i其相应的算符优先矩阵如题图 5-4 所示。试给出对符号串(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
3、) SaAbB AcAd BcBdd5-7 对如下的文法分别构造 LR(0)及 SLR(1)分析表,并比较两者的异同。ScAdb AASca 5-8 对于文法 GS:SA ABA BaBb (1) 构造 LR(1)分析表;(2) 给出用 LR(1)分析表对输入符号串 abab 的分析过程。5-9 对于如下的文法,构造 LR(1)项目集族,并判断它们是否为 LR(1)文法。(1) SA AAB BaBb(2) SaSaa第 4 章 习题答案 25-1 解:(1) 由文法的产生式和如答案图 5-1(a)所示的句型 Aa的语法树,可得 G 中的部分优先关系如答案图 5-1(b)所示。答 案 图 5-
4、1(a) 句 型 A/a/的 语 法 树 (b) 部 分 符 号 序 偶 间 的 优 先 关 系/S/A aAA SA /A A A / (2) 由答案图 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 * , * ( , ( * , * ) 答 案 图 5-2S- TE- PTFE FE )(- PST * F( E
5、)ETF*T FTPi(a)句 型 -P-(E)的 语 法 树 (b)句 型 i*(T*F)的 语 法 树(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)# i Fi3 #(F 优于 + i)# F TF4 #(T
6、优于 + i)# T T1T5 #(T1 优于 + i)# T1 E1T 16 #(E1 等于 + i)# 7 #(E1+ 低于 i )# 8 #(E1+i 优于 ) # i Fi9 #(E1+F 优于 ) # F TF10 #(E1+T 优于 ) # T T1T11 #(E1+T1 优于 ) # E1+T1 E1E 1+T112 #(E1 优于 ) # E1 EE 113 #(E 等于 ) # 14 #(E) 优于 # (E) F(E)15 #F 优于 # F TF16 #T 优于 # T T1T17 #T1 优于 # T1 E1T 118 #E1 优于 # E1 EE 119 #E 优于
7、#分析成功5-4 解:对符号串(i+i)进行算符优先分析的过程如答案表 5-4 所示。 因为分析成功,所以符号串(i+i)是文法 GE的合法句子。句子(i+i)及其分析过程中所得句型的语法树如答案图 5-4 所示。答案表 5-4 符号串(i+i)的算符优先分析过程步骤 分析栈当前栈顶终结符号优先关系当前输入符号余留输入串最左素短语0 # # ( i+i)# 1 # ( ( i +i)# 2 # ( i i + i)# i3 # (F ( + i)# 4 # ( F+ + i )# 5 # ( F+ i i ) # i6 # ( F+F + ) # F+F7 # (E ( ) # 8 # ( E
8、) ) # (E)9 #F # #分析成功+ T( )E ETFi FiETF+ T( )E ETF FETF ( )EETF答 案 图 5-4 句 子 (i+i) 及 其 分 析 过 程 中 所 得 句 型 的 语 法 树5-5 解:(1) 在文法 GS中引入一个新的开始符号 S,且将 SS 作为第 0 个产生式添加到文法 G 中,从而得到 G 的拓广文法 GS:0.SS 2.SaSc1.SaSb 3.Sab识别文法 GS全部可归前缀的 DFA 如答案图 5-5-(1)所示。答 案 图 5-5-(1) 识 别 GS全 部 可 归 前 缀 的 DFAI0: S SS aSbS aScS abI
9、1: S S SI3: S aSbS aSc I6: S aScSI2: S aSbS aScS abS aSbS aScS ab I4: S abaaI5: S aSbbbc因为文法 GS的每个 LR(0)项目集中都不含冲突项目,所以文法 GS是 LR(0)文法,故可构造出不含冲突动作的 LR(0)分析表如答案表 5-5-(1)所示。答案表 5-5-(1) 文法 GS的 LR(0)分析表ACTION GOTO状态a b c # S0123456s2 s2r3 r1r2 s4s5r3r1 r2s6r3r1r2accr3r1r213(2) 在文法 GS中引入一个新的开始符号 S,且将 SS 作为
10、第 0 个产生式添加到文法 G 中,从而得到 G 的拓广文法 GS:0.SS 2.SaSSS1.SaSSb 3.Sc识别文法 GS全部可归前缀的 DFA 如答案图 5-5-(2)所示。答 案 图 5-5-(2) 识 别 GS全 部 可 归 前 缀 的 DFAI0: S SS aSbS aSSS cI1: S S SI4: S aSSbS aSSS aSbS aSSS cI6: S aSbcI2: S aSbS aSSS aSbS aSSS cI7: S aSSaaI3: S cc bSS ca I5: S aSbS aSSS aSbS aSSS ccSa因为文法 GS的每个 LR(0)项目集中
11、都不含冲突项目,所以文法 GS是 LR(0)文法,故可构造出不含冲突动作的 LR(0)分析表如答案表 5-5-(2)所示。答案表 5-5-(2) 文法 GS的 LR(0)分析表ACTION GOTO状态a b c # S0123s2 s2 r3 r3s3s3 r3accr3144567s2 s2r1r2 r1 r2s3s3r1r2r1r257(3) 在文法 GS中引入一个新的开始符号 S,且将 SS 作为第 0 个产生式添加到文法 G 中,从而得到 G 的拓广文法 GS:0.SS 2.AAb1.SA 3.Aa识别文法 GS全部可归前缀的 DFA 如答案图 5-5-(3)所示。答 案 图 5-5
12、-(3) 识 别 GS全 部 可 归 前 缀 的 DFAI1: S S SI4: A Aba I2: S A A A bAI3: A a bI0: S SS AA AbA a因为在 LR(0)项目集 I2中含有移进-归约冲突项目,所以文法 GS不是 LR(0)文法,故构造出的 LR(0)分析表中含有冲突动作。文法 GS的 LR(0)分析表如答案表 5-5-(3)所示。答案表 5-5-(3) 文法 GS的 LR(0)分析表ACTION GOTO状态a b # S A01s3 acc1 2234r1 r3r2 s4 ,r1r3r2r1 r3r25-6 解:(1) 在文法 GS中引入一个新的开始符号
13、 S,且将 SS 作为第 0 个产生式添加到文法 G 中,从而得到 G 的拓广文法 GS:0.SS 3.RS1.SSab 4.Ra2. SbR识别文法 GS全部可归前缀的 DFA 如答案图 5-6-(1)所示。答 案 图 5-6-(1) 识 别 GS全 部 可 归 前 缀 的 DFAI0: S SS SabS bR I1: S S S S abS I6: S SabI2: S bRR SR aS SabS bRI7: S SabbbbaRaI3: S bRI4: R S S S abI5: R aaS由答案图 5-6-(1)可知,在项目集 I1 和 I4中都存在“移进-归约”冲突。在项目集 I
14、4 = RS, 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)所示。I0: S SS aSABS BAB bI1: S S SI9: S aSABB baI3: S B AA aAA BB bI6: S BA BA
15、SaAI2: S aSABS aSABS BAB bI7: A aAA aAA BB bI5: S aSABA aAA BB bI10: S aSABBI4: B bbb bI8: A B B BBBI1: A aAAaaa I4I4bbb答案图 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-
16、(2) 文法 GS的 SLR(1)分析表ACTION GOTO状态a b # S A B01234567891011s2 s2 s7r5 s7r2s7r4r1r3s4s4 s4 r5s4r2s4r4s4r1r3accr5r2r4r1r31569113388810(3) 在文法 GS中引入一个新的开始符号 S,且将 SS 作为第 0 个产生式添加到文法 G 中,从而得到 G 的拓广文法 GS:0.SS 4.A1.SaA 5.BcBdd2.SbB 6.B3. AcAd识别文法 GS全部可归前缀的 DFA 如答案图 5-6-(3)所示。答 案 图 5-6-(3) 识 别 GS全 部 可 归 前 缀
17、的 DFAI0: S SS aAS bB I1: S S SI8: S bBI5: A cAdA cAdA I10: B cBdccI3: S bBB cBdB I7: S cAdBa bI4: S aAAI6: A cAdA dI2: S aAA cAdA cI9: B cBdB cBdB I1: B cBdddI12: B cBddBc由答案图 5-6-(3)可知,在项目集 I2 ,I3 ,I5 和 I9中都存在“移进-归约”冲突。因为在项目集 I2 和 I5中, 由于 FOLLOR(A)=d,#,FOLLOR(A)c= ,所以其项目集的“移进-归约”冲突能通过 SLR(1)规则得到解决;
18、又因为在项目集 I3 和 I9中 , 由于 FOLLOR(B)=d,#, FOLLOR(B)c=,所以其项目集的“移进-归约”冲突也能通过 SLR(1)规则得到解决;所以文法 GS是 SLR(1)文法。因为 FOLLOR(S)=#,FOLLOR(A)=d,#,FOLLOR(B)=d,#,所以文法 GS的SLR(1)分析表如答案表 5-6-(3)所示。答案表 5-6-(3) 文法 GS的 SLR(1)分析表ACTION GOTO状态a b c d # S A B012s2 s3s5 r4accr4143456789101112s9s5s9r6r4s7r3r6s11s12r5r6r1 r4r3r2
19、r6r568105-7 解:在文法 GS中引入一个新的开始符号 S,且将 SS 作为第 0个产生式添加到文法 G 中,从而得到 G 的拓广文法 GS:0.SS 3.AASc1.ScAd 4.Aa2.Sb 识别文法 GS全部可归前缀的 DFA 如答案图 5-7 所示。答 案 图 5-7 识 别 GS全 部 可 归 前 缀 的 DFAI0: S SS cAdS b I1: S S SI5: S cAdA A ScS cAdS bbI2: S cAdA AScA aI4: A ac I3: S b SAc cI6: A cAda dI7: A AS cI8: A ASc因为文法 GS的每个 LR(0
20、)项目集中都不含冲突项目,所以文法 GS是 LR(0)文法。文法 GS的 LR(0)分析表如答案表 5-7-(a)所示。答案表 5-7-(a) 文法 GS的 LR(0)分析表ACTION GOTO状态a b c d # S A01234567s4r2r4r1s3r2r4s3r1s2r2r4s2r1s8r2r4s6r1accr2 r4 r1 1758 r3 r3 r3 r3 r3 因为 FOLLOR(S)=#,c,FOLLOR(A)=b,c,d,所以文法 GS的 SLR(1)分析表如答案表 5-7-(b)所示。答案表 5-7-(b) 文法 GS的 SLR(1)分析表ACTION GOTO状态a
21、b c d # S A012345678s4s3r4s3r3s2r2r4s2r1s8r3r4s6r3accr2 r1 175两个表的相同之处为:(1) 两个表的 GOTO 表部分完全相同。(2) 在两个表的 ACTION 表中,不含归约项目的项目集对应的行的元素完全相同,即第 0,2,5,7 行完全相同。两个表的不同之处为:在两个表的 ACTION 表中,含有归约项目的项目集对应的行的元素不同,即第3,4,6,8 行的元素不同。以第 3 行为例,答案表 5-7-(a)中的所有元素都为 r2 ;而在答案表 5-7-(b)中 , 因为 FOLLOR(S)=#,c,故仅在 “#”和“c”列对应的元素
22、为 r2 。5-8 解:(1) 在文法 GS中引入一个新的开始符号 S,且将 SS 作为第 0 个产生式添加到文法 G 中,从而得到 G 的拓广文法 GS:0.SS 3.A1.SA 4.BaB2.ABA 5.Bb文法 GS的 LR(1)项目集及 DFA 如答案图 5-8 所示。答 案 图 5-8 文 法 GS的的 LR(1)项 目 集 及项 目 集 及 DFAI0: S S , #S A , #A BA , #A , #B aB, a/b/#B b , a/b/#I1: S S , #SAI4: B aB , a/b/#B aB, a/b/# B b , a/b/#I7: B aB, a/b/
23、#aI2: S A , #AB I3: A B A , #A BA , #A , #B aB, a/b/#B b , a/b/#I5: B b, a/b/#bab I6: A BA , #abBB文法 GS的 LR(1)分析表如答案表 5-8-(1)所示。答案表 5-8-(1) 文法 GS的 LR(1)分析表ACTION GOTO状态a b # S A B012s4 s5 r3accr11 2 334567s4s4r5r4s5s5r5r4r3r5r2r46 37(2) 用 LR(1)分析表对输入符号串 abab 的分析过程如答案表 5-8-(2)所示。因为分析成功,所以符号串 abab 是文法
24、 GS的合法句子。答案表 5-8-(2) 符号串 abab 的 LR 分析过程步骤 状态栈 符号栈 余留输入串 分析动作 下一状态1 I0 # abab# s4 42 I0I4 #a bab# s5 53 I0I4I5 #ab ab# r5 GOTOI4 ,B=74 I0I4I7 #aB ab# r4 GOTOI0 ,B=35 I0I3 #B ab# s4 46 I0I3I4 #Ba b# s5 57 I0I3I4I5 #Bab # r5 GOTOI4 ,B=78 I0I3I4I7 #BaB # r4 GOTOI3 ,B=39 I0I3I3 #BB # r3 GOTOI3 ,A=610 I0I
25、3I3I6 #BBA # r2 GOTOI3 ,A=611 I0I3I6 #BA # r2 GOTOI0 ,A=212 I0I2 #A # r1 GOTOI0 ,S=113 I0I1 #S # acc5-9 解:(1) 在文法 GS中引入一个新的开始符号 S,且将 SS 作为第 0 个产生式添加到文法 G 中,从而得到 G 的拓广文法 GS:0.SS 3.A1.SA 4.BaB2.AAB 5.Bb文法 GS的 LR(1)项目集及 DFA 如答案图 5-9-(1)所示。答 案 图 5-9-(1) 文 法 GS的的 LR(1)项 目 集 及项 目 集 及 DFAI0: S S , #S A , #
26、A AB , a/b/#A , a/b/#I1: S S , #SAI5: B aB , a/b/#B aB, a/b/# B b , a/b/#I6: B aB, a/b/#I2: S A , #A A B , a/b/#B aB, a/b/#B b , a/b/# I4: B b, a/b/#aaI3: A AB , a/b/#BbB b文法 GS的 LR(1)分析表如答案表 5-9-(1)所示。因为分析表中不含多重定义的元素,所以文法 GS是 LR(1)文法。答案表 5-9-(1) 文法 GS的 LR(1)分析表ACTION GOTO状态a b # S A B012345r3 s5r2r
27、5 s5r3s4r2r5s4r3accr1r2r51 2366 r4 r4 r4(2) 在文法 GS中引入一个新的开始符号 S,且将 SS 作为第 0 个产生式添加到文法 G 中,从而得到 G 的拓广文法 GS:0.SS 1.SaSa 2.Sa 文法 GS的 LR(1)项目集及 DFA 如答案图 5-9-(2)所示。答 案 图 5-9-(2) 文 法 GS的的 LR(1)项 目 集 及项 目 集 及 DFAI0: S S , #S aSa, #S a , # I1: S S , #SaI3: S aSa , #aaSI2: S aSa , #S a, #S aSa, aS a , aI5: S aSa , aS a, aS aSa, aS a , aS I6: S aSa , aI4: S aSa, # I7: S aSa, aaa文法 GS的 LR(1)分析表如答案表 5-9-(2)所示。因为分析表中含有多重定义的元素 ACTIONI5 ,a= r2 ,s5 ,所以文法 GS不是 LR(1)文法。答案表 5-9-(2) 文法 GS的 LR(1)分析表ACTION GOTO状态a # S01234567s2 s5s4r2 ,s5 s7r1accr2 r1136