编译原理及实现课后习题答案.docx
《编译原理及实现课后习题答案.docx》由会员分享,可在线阅读,更多相关《编译原理及实现课后习题答案.docx(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2.1设字母表人=匕,符号串x=aaa,写出下列符号串及其长度:x。, xx, x5以及A+和A*.x= (aaa)= e|. x|=0xx=aaaaaa|xx|=6x5=aaaaaaaaaaaaaaa| x5|=15A+ =A1 U A2 U . U A nU aa, aaa, aaaa, aaaaa*A* = A0 U A1 U A2 U . U A n U = e , a, aa, aaa, aaaa, aaaaa* 2. 2 令工=匕,b, c),又令x二abc, y=b, z=aab,写出如下符号串及它们的长度:xy, xyz, (xy) 3xy=abcb.|xy|=4xyz=abc
2、baab|xyz|=7(xy)3=(abcb)3 =abcbabcbabcb | (xy)3 |=122.3 设有文法GS: S:=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语法树。S = SS* 二Sa* 二 SS+a* = Sa+a* = aa+a*4已知文法GZ: Z:=UO | VI U: :=Z1 | 1 V:=ZO | 0 ,请写出全部由此文法描述的只含有四个符号的句子。Z=U0=Z10=U010=1010Z=UO=Z1O=V110=0110Z=Vl=Z01=U001=1001Z=Vl=Z01=V101=01012.5 已知文法GS: S:=AB A:=aA | e
3、B:=bBc | be ,写出该文法描述的语言。A: :=aA | 描述的语言:an|n=0B:=bBc | be 描述的语言:bncn|n=lL (G S) = anbmcm | n=0, m=l已知文法E:hI E+T | E-T、T:=F | T*F | T/F、F: = (E) | i,写出该文法的开始符号、终结符号集合Vt、非终结符号集合Vn。(1) 考虑下面简化了的C声明文法:声明语句一类型X变量表);类型-int | float | char变量表f ID,变量表 | ID(1) 在该文法中提取左因子。(2) 为所得的文法的非终结符构造FIRST集合和FOLLOW集合。(3) 说
4、明所得的文法是LL文法。(4) 为所得的文法构造LL分析表。(5) 假设有输入串为“char x, y, z; ”,写出相对应的LL分析过程。解:(2) 规则变量表f ID,变量表| ID提取公因子如下:变量表ID (,变量表| ) 增加新的非终结符变量表1,规则变为:变量表f ID变量表1变量表lf,变量表| .C声明文法改变为:声明语句一类型X变量表;类型f int | float | char变量表-ID变量表1变量表1一,变量表| (3) FIRST(声明语句)=FIRST(类型)=int, float, char)FIRST (变量表 )=IDFIRST(变量表 1)= , e FO
5、LLOW (声明语句 )=#FOLLOW (类型 )=FIRST (变量表 )=IDFOLLOW ( 变量表)=FOLLOW (变量表 1 = ;(4) 所得文法无左递归,且FIRST (int) nFIRST (float) nFIRST (char) =OFIRST (,变量表)DFIRST ( ) =(DFIRST (,变量表)AFOLLOW(变量表 1)=因此,所得文法为LL文法。(4) 所得的文法构造LL(1)分析表如下所示:9intfloatcharID#声明 语句POP , PUSH(;变量 表X类型)POP , PUSH(; 变量 表X类型)POP , PUSH(; 变量 表X
6、类型) 类 型POP , PUSH (int)POP , PUSH(float)POP , PUSH(char)变量 表POP , PUSH变量表 DID)变量 表1POPPOP ,PUSH变量表,) 9POPNEX TSYMintPOP,更常用且简单的LL(1)分析表:NEXTSYMfloatPOP, NEXTSYMcharPOP, NEXTSYMIDPOP, NEXTSYMPOP, NEXTSYM#ACCEPT 9intfloatcharID9ft声明 语句声明语句一 类型X变量 表;声明语句一 类型 变量 表;声明语句一 类型X变量 表; 类 型类型)f int 类型f float 类型
7、f char变量 表变量表 f ID变 量表1变量 表1变 量表1 一8变量 表 D f , 变 量表)(5) 输入串“char x, y, z; ”相对应的LL(1)分析过程如下:步骤分析栈余留输入串分析表元素所用产生式1#声明语句char x, y, z; #POP , PUSH(;变量表 类型)声明语句一 类型X变量 表);2#;变量表X类 型char x, y, z; #POP , PUSH(char)类型 f char3#;变量表 charchar x, y, z; #POP, NEXTSYM4变量表x, y, z; #POP , PUSH变量表 DID)变量表-ID 变量表15#;
8、 变量表Dxx, y, z; #POP, NEXTSYM6#; 变量表1,y, z; #POP ,PUSH(变量表,)变量表1一, 变量表7#;变量表,,y, z; #POP, NEXTSYM8#; 变量表y,z; #POP , PUSH变量表 DID)变量表-ID 变量表19#; 变量表lyy,z; #POP,NEXTSYM10#; 变量表1,Z; #POP ,PUSH(变量表,)变量表, 变量表11#; 变量表,z; #POP, NEXTSYM12机变量表Z; #POP ,PUSH变量表DID)变量表f id 变量表i13#;变量表lzZ; #POP, NEXTSYM14#; 变量表1PO
9、P变量表lf 15#;#POP, NEXTSYM16#ACCEPT5.1 考虑以下的文法:S-S;T|TTf a1.1 为这个文法构造LR (0)的项目集规范族。1.2 这个文法是不是LR(0)文法?如果是,则构造LR(0)分析表。1.3 对输入串进行分析。解:(1)拓广文法GS0: S fS1: S-S;T2: ST3: Ta构造LR(0)项目集规范族(2)该文法不存在“归约一归约”和“归约一移进”冲突,因此是LR(0)文法。LR(0)分析表如下:状态项目集转换函数0S f S Sf S;T ST T一 aG00, S=lG00, S=lG00, T=2G00, a =31S fSSfS ;
10、TACCEPTG0l, ;=42S-TR23Ta R34SS;TT aGO4, T=5GO4, a =35S-S;TRI状态ACTIONGOTOa#ST0S3121S4ACCEPT2R2R2R23R3R3R34S355RIRIRI(3)对输入串“a;a”进行分析如下:步骤状态栈符号栈输入符号栈ACTIONGOTO00#a; a#S3103#a;a#R32302#T;a#R21401#S;a#S45014#S;a#S360143#S;a#R3570145#S;T#RI1801tts#ACCEPT5.2 证明下面文法是SLR(l)文法,但不是LR(O)文法。S-AA-Ab |bBaBf aAc |
11、 a | aAb解:文法GS:0: Sf A1: A-Ab2: A-bBa3: Bf aAc4: Bf a5: Bf aAb构造LR(0)项目集规范族:状态项目集转换函数0S AG00, A = lA AbG00, A=lA bBaG00, b=21SAACCEPTAA bG0l, b=32Af b BaGO2, B=4Bf aAcGO2, a =5B一 aGO2, a =5B aAbGO2, a =53Af Ab RI4AbB aGO4, a =65Bf a AcGO5, A =7Ba R4B-a AbGO5, A =7A AbGO5, A =7Af bBaGO5, b=26A-bBa R2
12、7Bf aA cGO7, c=8BaA bGO7, b=9AA bGO7, b=98Bf aAc R39BaAb R5AAb RI状态5存在“归约一移进”冲突,状态9存在“归约一归约”冲突,因此该文法不是LR(O)文法。状态5:FOLLOW(B) = a,因此,FOLLOW(B) n b =0状态9:FOLLOW (B) = a, FOLLOW (A) = #, b, c),因此 FOLLOW (B) n FOLLOW (A)=状态5和状态9的冲突均可用SLR(l)方法解决,构造SLR(l)分析表如下:状态ACTIONGOTOabcAB0S211S3ACCEPT2S543RIRIRI4S65R
13、4S276R2R2R27S9S88R39R5RIRIRI该SLR(1)分析表无重定义,因此该文法是SLR(1)文法,不是LR(O)文法。5.3 证明下面文法是LR文法,但不是SLR(l)文法。SAaAb |BbBaA- Bf e解:拓广文法GS0: S -s1: SAaAb2: SfBbBa3: A- e4: B- e构造LR(O)项目集规范族:状态项目集转换函数0S 一 SS AaAbSf BbBaA一 Bf GOEO, S=l G00, A =2 GOE0, B=3 R3 R41S -SACCEPT2Sf A aAbG0E2, a =43Sf B bBaG0E3, b=54S-Aa AbA
14、f G0E4, A =6R35Sf Bb BaB一 G0E5, B=7R46Sf AaA bG0E6, b=87Sf BbB aG07, a =98Sf AaAb RI9Sf BbBa R2状态 0 存在“归约一归约”冲突,且 FOLLOW (A) = a, b。FOLLOW (B) = a, b。即 FOLLOW (A) A FOLLOW (B) = a,b W,所以该文法不是SLR(l)文法。构造LR项目集规范族:状态项目集转换函数0SS, # Sf AaAb, # Sf BbBa, # A , a Bf , bG00, S=lG00, A =2G00, B=3R3R41S -s , #A
15、CCEPT2SAaAb, #GO2, a =43SBbBa, #GO3, b=54S-AaAb, #Af , bGO4, A =6R35S-Bb Ba, #B , aGO5, B=7R46S-AaAb, #GO6, b=87S-BbBa, UGO7, a =98S-AaAb , itRI9S-BbBa,#R2LR分析表:分析表无重定义,说明该文法是LR文法,不是SLR(1)文法。状态ACTIONGOTOab#SAB0R3R41231ACCEPT2S43S54R365R476S87S98RI9R25.4 考虑以下的文法:E-EE+EEE*Ea(1)为这个文法构造LR项目集规范族。(2)构造LR分
16、析表。.(3)为这个文法构造LALR项目集规范族。(4)构造LALR分析表。(5)对输入符号串“aa*a+”进行LR和LALR 分析。解:(1)拓广文法GS:0: S-E1: E-EE+2: EEE*3: Ea构造LR项目集规范族:状态项目集转换函数0S- E , #G00, E=lEf EE+ , a:#G00, E=lEf EE* , a:#G00, E=lEf a , a:#G00, a =21S-E,#ACCEPTEEE+ , a:#GO El, E=3EE E* , a:#G0l, E=3Ef EE+ , *: +G0l, E=3E EE* , *: +G0l, E=3Ef a ,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实现 课后 习题 答案
限制150内