收藏 分享(赏)

第4章作业答案.doc

上传人:gnk289057 文档编号:5549329 上传时间:2019-03-07 格式:DOC 页数:15 大小:633.50KB
下载 相关 举报
第4章作业答案.doc_第1页
第1页 / 共15页
第4章作业答案.doc_第2页
第2页 / 共15页
第4章作业答案.doc_第3页
第3页 / 共15页
第4章作业答案.doc_第4页
第4页 / 共15页
第4章作业答案.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、4.解: 7.解:(1)D 产生式两个候选式 fD 和 f 的 first 集交集不为空,所以不是 LL(1)的。(2)此文法具有左递归性,据第 5 题结论,不是 LL(1)的。9.解:(1)(2)将 SSaB | bB 改写为 SbBS,S aBS|,可验证,新文法是 LL(1)的。20.解:(1)(2)将 SSaB | bB 改写为 SbBS,S aBS|,可验证,新文法是 LL(1)的。31 解:算符优先矩阵:+ * ( ) i #+ * ( I # = a # (2)用 Bell 方法求优先函数的过程如下:显然,文法不是算符优先文法, 所以不能线性化。35,36 解:(1)识别全部活前

2、缀的 DFA 如下:状态 项目集 经过的符号 到达的状态I0 S SSaSbSaScSabSaI1I2I1 S SI2 SaSbSaScSabSaSbSaScSabSabI3I2I4I3 SaSbSaScbcI5I6I4 SabI5 SaSb a #f 5 7 5 1g 5 5 6 1ACTION GOTOa b c # S0 S2 11 ACC2 S2 S4 33 S5 S64 R3 R3 R35 R1 R1 R16 R2 R2 R2是 LR(0)文法,其 SLR(1)分析表如下:FOLLOW(S)=#,b,cI6 SaSc(2)识别全部活前缀的 DFA 如下:状态 项目集 经过的符号 到达

3、的状态I0 SSScASccBScI1II1 S SI2 ScASccBAcAAaAcaI3I4I5I3 ScAI4 SccBAcABccBBbAcAAaBAcbaI6I5I7I8I5I5 AaI6 SccBI7 BccBAcAAcAAaCAaI9I10I5I8 BbI9 BccBAcABccBBbAcAAaBAcbaI11I10I7I8I5I10 AcAI11 BccB(3)识别全部活前缀的 DFA 如下状态 项目集 经过的符号 到达的状态I0 S SSaSSbSaSSSScScaI1I2I3是 LR(0)文法,其 SLR(1)分析表如下:FOLLOW(S)=FOLLOW(A)=FOLLOW

4、(B)=#ACTION GOTOa b c # S A B0 S2 11 ACC2 S5 S4 33 R14 S5 S8 S7 3 65 R46 R27 S5 S9 108 R69 S5 S8 S7 10 1110 R311 R5I1 S SI2 ScI3 SaSSbSaSSSSaSSbSaSSSScScaI4I2I3I4 SaSSbSaSSSSaSSbSaSSSScScaI5I2I3I5 SaSSbSaSSSSaSSbSaSSSScSabcI7I3I6I2I6 SaSSbI7 SaSSS(4)识别全部活前缀的 DFA 如下状态 项目集 经过的符号 到达的状态I0 S SSAAAbAaSAaI

5、1I2I3I1 S SI2 SASAbb I4I3 AaI4 SAb37 解:状态 项目集 经过的符号 到达的状态I0 S SS(SRSaS(aI1I2I3I1 S SI2 S(SRS(SRSaS(aI4I2I3是 LR(0)文法,其 SLR(1)分析表如下:FOLLOW(S)=#,a,b,cACTION GOTOa b c # S0 S3 S2 11 ACC2 R3 R3 R3 R33 S3 S2 44 S3 S2 55 S3 S6 S2 76 R1 R1 R1 R17 R2 R2 R2 R2因为 I2 中含有冲突项目,所以不是 LR(0)文法,其 SLR(1)分析表如下:FOLLOW(S)

6、=#b=(所以可以用 SLR(1)规则解决冲突), FOLLOW(A)=b,#ACTION GOTOa b # S A0 S3 1 21 ACC2 S4 R13 R3 R34 R2 R2I3 SaI4 S(SRS(SRSaR,SRR)a(R,)I3I2I5I6I7I5 S(SRI6 R, SRS(SRSaS(aI8I2I3I7 R) I8 R,SRR,SRR),RI7I6I9I9 R,SR38 解:(1)状态 项目集 经过的符号 到达的状态I0 S SSSabSbRSbI1I2I1(冲突项目)S SSSaba accI3I2 SbRRSRaSSabSbRRSabI4I5I6I2I3 SSab

7、b I7I4 SbR r2I5(冲突项目)RSSSaba I3I6 RaI7 SSab项目 I1,I5 同时具有移进和归约项目,对于 I5= RS, SSab ,follow(R)=a,follow(R) a=a,所以 SLR(1)规则不能解决冲突,从而该文法不是 SLR(1)文法。(2)状态 项目集 经过的符号 到达的状态I0 S SSaSABSaI1I2LR(0)分析表如下:是 LR(0)文法。ACTION GOTOa ( ) , # S R0 S3 S2 11 ACC2 S3 S2 43 R2 R2 R2 R2 R24 S3 S2 S7 S6 55 R1 R1 R1 R1 R16 S3

8、S2 87 R4 R4 R4 R4 R48 S7 S6 99 R3 R3 R3 R3 R3SBABbBbI3I4I1 SSI2 SaSABSaSABSBABbSaBbI5I2I3I4I3 SBAAaAABBbAaBbI6I7I8I4I4 Bb r5I5 SaSABAaAABBbAaBbI9I7I8I4I6 SBA r2I7 AaAABAaABbABabI10I8I7I4I8 AB r4I9 SaSABBbBbI11I4I10 AaA r3I11 SaSAB r1(3)先求识别全部活前缀的 DFA:状态 项目集 经过的符号 到达的状态I0 S SSaSbSbSaSabSabI1I2I3I1 S

9、S accI2 SaSBSabSaSbSbSaSabSbaI4I5I2I3 SbSaSaSbSbSaSabI6I2I3不存在冲突项目,故该文法是 LR(0)文法,也是 SLR(1)文法。SLR(1)分析表如下:ACTION GOTOa b # S A B0 S2 S4 1 31 ACC2 S2 S4 5 33 S7 S4 6 84 R5 R5 R55 S7 S4 9 86 R2 R2 R27 S7 S4 10 88 R4 R4 R49 S4 1110 R3 R3 R311 R1 R1 R1不存在冲突项目,故该文法是LR(0)文法,也是 SLR(1)文法。SLR(1)分析表如下:ACTION G

10、OTOa b # S0 S2 S3 11 ACC2 S2 S5 43 S2 S3 64 S75 R3 R3 R36 S87 R1 R1 R18 R2 R2 R2SabI4 SaSb b I7I5 Sab r3I6 SbSa a I8I7 SaSb r1I8 SbSa r2(4)先求识别全部活前缀的 DFA:状态 项目集 经过的符号 到达的状态I0 S SSaASbBSabI1I2I3I1 S S accI2(冲突)SaAAcAdAAcI4I5r4I3(冲突)SbBBcBddBBcI6I7r6I4 SaA r1I5(冲突)AcAdAcAdAAcI8I5r4I6 SbB r2I7(冲突)BcBdd

11、BcBddBBcI9I7r6I8 AcAd d I10I9 BcBdd d I11I10 AcAd r3I11 BcBdd d I12I12 BcBdd r5(5)解:原文法等价化为 q1q2, q1q3, q2q4;q5, q4begin D, q4q4;D, q5S end, q5S;q5, q3beginq5, 先求识别全部活前缀的 DFA:状态 项目集 经过的符号到达的状态I0 q1 q1q1q2q1q3q2q4;q5q1q2q3q4I1I2I3I4因为 follow(A)=follow(B)=#,d,所以冲突项目 I2,I3,I5,I7 可以用 SLR(1)规则得以解决,从而该文法为

12、 SLR(1)文法。其SLR(1)分析表如下:ACTION GOTOa b c d # S A B0 S2 S3 11 Acc2 S5 R4 R4 43 S7 R6 R6 64 R15 S5 R4 R4 86 R27 S7 R6 R6 98 S109 S1110 R3 R311 S1212 R5 R5q3begin q5q4begin Dq4q4;Dbegin I5I1 q1 q1 ACCI2 q1q2 R1I3 q1q3 R2I4 q2q4;q5q4q4;D;DI6I5 q3beginq5q3beginDq5Sendq5S;q5q5DSI7I8I9I6 q2q4; q5q4q4; Dq5Se

13、ndq5S;q5q5DSI10I11I9I7 q3beginq5 R8I8 q3beginD R4I9 q5Sendq5S;q5end;I12I13I10 q2q4;q5 R3I11 q4q4;D R5I12 q5Send R6I13 q5s; q5q5Sendq5S;q5q5SI14I9I14 q5s;q5 R739 解:识别活前缀的 DFA 及 LR(0)分析表:状态 项目集 经过的符号 到达的状态I0 S SSAAdScAdSbAAScASbAcdAaSAabcI0I6I5I4I3I1 S SASbb I2I2 ASbI3 ScAd S I8不存在冲突项目,故该文法是 LR(0)文法,也

14、是 SLR(1)文法。SLR(1)分析表如下:ACTION GOTO; beginD S end# q1q2q3q4q50 1 2 3 41 Acc2 R13 R24 S65 S8S976 S7S9107 R88 R49 S13S1210R311R512R613S91414R7AcdAAScASbAcdAaSAAdScAdSbAabcdI9I5I4I3I7I4 SbI5 AaI6 SAAdAAScAAScASbAcdAaSAAdScAdSbSAabcI11I10I5I4I3I7 AcdI8 ASb b I2I9 ScAdAAScSAAdSAAdScAdSbAAScASbAcdAaSAabcdI

15、11I10I5I4I3I14I10 SAAdAAScSAAdSAAdScAdSbAAScASbAcdAaSAabcdI11I10I5I4I3I13I11 AAScASbbcI2I12I12 AAScI13 SAAdI14 ScAdLR(0) 分析表ACTION GOTOa b c d # S A0 s5 s4 s3 1 61 s2 acc2 r5 r5 r5 r5 r53 s5 s4 s3 s7 8 94 r3 r3 r3 r3 r35 r7 r7 r7 r7 r76 s5 s4 s37 r6 r6 r6 r6 r6 11 108 s29 s5 s4 s3 s14 11 1010 s5 s4

16、s3 s13 11 1011 s2 s1212 r4 r4 r4 r4 r413 r1 r1 r1 r1 r114 r2 r2 r2 r2 r2两表的异同:两表都用 ACTION 表和 GOTO 表反映了移进、归约(包括接受)的状态和动作。不同之处在于 SLR(1)增加了在归约的时候考虑向前符号 a 以解释可能出现的“移进归约”冲突;SLR(1)的分析较稀疏些,原因是填写归约项时,并不是在一状态对应行上全部填写归约动作,而是考虑了相应非终结符的 FOLLOW 集因素。另外,在分析效率上 SLR(1)分析的效率更高一些,因为在发现错误方面,SLR(1)比 LR(0)分析发现的更早些。40 解:求

17、 LR(1)项目集和状态转换表:状态 项目集 经过的符号 到达的状态I0 S S#SA#ABA#A#BaB#,a,bBb#,a,bSABabI1I2I3I4I5I1 S S#I2 SA#I3 ABA#A#ABA#BaB#,a,bBb#,a,bABabI6I3I4I5相应的 LR(1)分析表为:STATE ACTION GOTOa b # S A B0 S4 S5 R3 1 2 31 ACC2 R23 S4 S5 R3 6 34 S4 S5 75 R5 R5 R56 R27 R4 R4 R4SLR(1)分析法:FOLLOW(S)=c,b FOLLOW(A)=a,b,c,dACTION GOTOa

18、 b c d # S A0 s5 s4 s3 1 61 s2 acc2 r5 r5 r5 r53 s5 s4 s3 s7 8 94 r3 r35 r7 r7 r7 r76 s5 s4 s37 r6 r6 r6 r6 11 108 s29 s5 s4 s3 s14 11 1010 s5 s4 s3 s13 11 1011 s2 s1212 R4 r4 r4 r413 r1 r114 r2 r2I4 BaB#,a,bBaB#,a,bBb#,a,bBabI7I4I5I5 Bb#,a,bI6 ABA#I7 BaB#,a,b用 LR(1)分析表对输入符号串 abab 的分析过程:步骤 状态 栈中符号 余

19、留符号 分析动作 下一状态1 0 # abab# S4 42 04 #a bab# S5 53 045 #ab ab# R5 74 047 #aB ab# R4 35 03 #B ab# S4 46 034 #Ba b# S5 57 0345 #Bab # R4 78 0347 #BaB # R4 39 033 #BB # R3 610 0336 #BBA # R2 611 036 #BA # R2 112 01 #A # acc41 解:求 LR(1)项目集和状态转换图:状态 项目集 经过的符号 到达的状态I0 S S#SA#AAB#,a,bASAI1I2I1 S S#I2 SA#AAB#,

20、a,bBaB#,a,bBb#,a,bBabI3I5I4I3 AAB#,a,bI4 Bb#,a,bI5 BaB#,a,bBaB#,a,bBb#,a,bBabI6I5I4I6 BaB#,a,bLR(1)分析法:状态 项目集 经过的符号 到达的状态I0 E E# E I1相应的 LR(1)分析表为:STATE ACTION GOTOa b # S A B0 R3 R3 R3 1 21 Acc2 S5 S4 R13 R2 R2 R24 R5 R5 R55 S5 S4 66 R4 R4 R4表中没有多从定义的元素,所以文法是 LR(1)文法。EE+T#/+ET#/+T(E)#/+Ta#/+T(aI1I5

21、I4I1 E E#EE+T#/+ I2I2 EE+T#/+T(E)#/+Ta#/+T(aI3I5I4I3 EE+T#/TI4 Ta#/+I5 T(E)#/+EE+T+/)ET)/+T(E)+/)Ta+/)ECTaI7I8I9I12I6 ET#/+I7 T(E)#/+EE+T+/)+I10I11I8 T(E)/+EE+T+/)ET)/+T(E)+/)Ta+/)(aETI8I12I14I9I9 ET+/)I10 T(E) #/+I11 EE+T+/)T(E)+/)Ta+/)(TaI8I13I12I12 Ta+/)I13 EE+T)/+I14 T(E)+/)EE+T+/)+)I11I15I15 T(

22、E) +/)42 解:(1) 求 LR(1)项目集和状态转换图:状态 项目集 经过的符号 到达的状态I0 E E#EE+E#,+,*EE*E#,+,*Ei#,+,*EiI1I2I1 E E# + I3依据以上图求出该文法的 LR(1)分析表知道由于项目 I5,I6 导致了有多重定义的元素,所以不是 LR(1)文法。事实上,从文法本身可以看出它是二义性的,因此不可能是 LR(1)文法。等价的 LR(1)文法为:EE+T|TFT*F|FFi。另外,对原文法的冲突项来说,若考虑算术运算符的运算优先级别,以及结合方式,上述冲突是可解决的。例如,假设表达式运算满足左结合律(即 a+b+c=(a+b)+c

23、 而不是右结合律:a+b+c=a+(b+c)),及*运算和优化优先级高于+运算,上述文法相应的 LR(1)分析表为EE+E#,+,*EE*E#,+,* I4I2 Ei#,+,*I3 EE+E#,+,*EE+E#,+,*EE*E#,+,*Ei#,+,*EiI5I2I4 EE*E#,+,*EE+E#,+,*EE*E#,+,*Ei#,+,*EiI6I2I5 EE+E#,+,*EE+E#,+,*EE*E#,+,*+*I3I4I6 EE*E#,+,*EE+E#,+,*EE*E#,+,*+*I3I4(2) 求 LR(1)项目集和状态转换图:状态 项目集 经过的符号 到达的状态I0 S S#SaSa#SbS

24、b#Sa#Sb#SabI1I2I3I1 S S#I2 SaSa#Sa#SaSaaSbSbaSaaSbaSabI4I7I6I3 SbSb#Sb#SaSabSabSbSbbSbbSabI11I14I13I4 SaSa# a I5I5 SaSa#I6 SbSbaSbaSaSabSabI10I14I13状态 ACTION GOTOi + * # E0 s2 11 s3 s4 acc2 r3 r3 r33 s2 54 s2 65 r1 s4 r16 r2 r2 r2SbSbbSabSbbI7 SaSaaSaaSaSaaSbSbaSaaSbaSabI8I7I6I8 SaSaa a I9I9 SaSaaI1

25、0 SbSba b I15I11 SbSb# b I12I12 SbSb#I13 SbSbbSbbSaSabSbSbbSabSbbSabI16I14I13I14 SaSabSabSaSaaSbSbaSaaSbaSabI18I7I6I15 SbSbaI16 SbSbb b I17I17 SbSbbI18 SaSab a I19I19 SaSab有移进归约冲突,不是 LR(1)文法。(3) 求 LR(1)项目集和状态转换图:状态 项目集 经过的符号 到达的状态I0 S S#SV:=E#SLS#LI:IVI:SVLII1I2I3I4I1 S S#I2 SV:=E# : I5I3 SLS#SV:=E#SLS#VI:LI:ISLII6I3I4I4 LI:IVI: I7I5 SV: =E# = I8I6 SLS#I7 LI: II8 SV:= E# E I9I9 SV:=E#依据以上图求出该文法的 LR(1)分析表知道由于项目 I4 导致了有多重定义的元素,所以不是LR(1)文法。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报