ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:490.43KB ,
资源ID:8891221      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8891221.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理与实践教程黄贤英王柯柯编著习题答案解析.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理与实践教程黄贤英王柯柯编著习题答案解析.docx

1、编译原理与实践教程黄贤英王柯柯编著习题答案解析第2章参考答案:1,2,3:解答:略!4. 解答: A: B: C: D: 5. 解答: 用E表示,T表示,F表示,上述文法可以写为: E T | E+T T F | T*F F (E) | i最左推导:E=E+T=E+T+T=T+T+T=F+T+T=i+T+T=i+F+T=i+i+T=i+i+F=i+i+iE=E+T=T+T=F+T=i+T=i+T*F=i+F*F=i+i*F=i+i*i最右推导:E=E+T=E+F=E+i=E+T+i=E+F+i=E+i+i=T+i+i=F+i+i=i+i+iE=E+T=E+T*F=E+T*i=E+F*i=E+i

2、*i=T+i*i=F+i*i =i+i*ii+i+i和i+i*i的语法树如下图所示。i+i+i、i+i*i的语法树6. 解答:(1) 终结符号为:or,and,not,(,),true,false非终结符号为:bexpr,bterm,bfactor开始符号为:bexpr(2) 句子not(true or false)的语法树为:7. 解答:(1) 把anbnci分成anbn和ci两部分,分别由两个非终结符号生成,因此,生成此文法的产生式为:S ABA aAb|abB cB|(2) 令S为开始符号,产生的w中a的个数恰好比b多一个,令E为一个非终结符号,产生含相同个数的a和b的所有串,则产生式如

3、下: S aE|Ea|bSS|SbS|SSbE aEbE|bEaE|(3) 设文法开始符号为S,产生的w中满足|a|b|2|a|。因此,可想到S有如下的产生式 (其中B产生1到2个b): S aSBS|BSaSB b|bb(4) 解法一:S 奇数头整数奇数尾 |奇数头奇数尾 |奇数尾 奇数尾 1|3|5|7|9 奇数头 2|4|6|8|奇数尾 整数 整数数字|数字 数字 0|奇数头解法二:文法G=(S,A,B,C,D,0,1,2,3,4,5,6,7,8,9,P,S)SAB | BAAC | DB1|3|5|7|9D2|4|6|8|BC0|D(5) 文法G=(N,S,N,M,D,0,1,2,3,

4、4,5,6,7,8,9 ,S,P)SN0 | N5NMD|M1|2|3|4|5|6|7|8|9DD0 | DM |(6) GS:SaSa | bSb | cSc | a | b | c |8. 解答:(1) 句子abab有如下两个不同的最左推导:S = aSbS = abS =abaSbS = ababS = abab S = aSbS = abSaSbS = abaSbS = ababS = abab 所以此文法是二义性的。(2) 句子abab的两个相应的最右推导: S = aSbS = aSbaSbS = aSbaSb = aSbab = abab S = aSbS = aSb = abS

5、aSb = abSab = abab(3) 句子abab的两棵分析树: (a)(b)(4) 此文法产生的语言是:在a,b上由相同个数的a和b组成的字符串。9,10:解答:略!第3章习题解答:1. 解答:(1) (2) (3) (4) (5) (6) 2. 分析有限自动机分为确定有限自动机和非确定有限自动机。确定有限自动机的确定性表现在映射:QVT -q是单值函数,也就是说,对任何状态 qQ和输入字符串aVT, (q,a)唯一确定下一个状态。显然,本题给出的是一个确定的有限自动机,它的状态转换图是C中的。它所接受的语言可以用正则表达式表示为00(0|1)*,表示的含义为由两个0开始的后跟任意个(

6、包含0个)0或1组成的符号串的集合。 2. 解答:A: B: C: D:E: 3,4解答:略!5解答:6解答:(1) (0|1)*01(2) (1|2|9)(0|1|2|9)*| )(0|5)(3) (0|1)*(011)(0|1)*(4) 1*|1*0(0|10)*(1|) (5) a*b*c*z*(6) (0|10*1)*1(7) (00|11)*(01|10)(00|11)*(01|10)(00|11)*)*(8) 分析设S是符合要求的串,|S|=2k+1 (k0)。则 SS10|S21,|S1|=2k (k0),|S2|=2k (k0)。且S1是0,1上的串,含有奇数个0和奇数个1。S

7、2是0,1上的串,含有偶数个0和偶数个1。考虑有一个自动机M1接受S1,那么自动机M1如下:和L(M1)等价的正规式,即S1为:(00|11)|(01|10)(00|11)*(01|10)*(01|10)(00|11)*类似的考虑有一个自动机M2接受S2,那么自动机M2如下:和L(M2)等价的正规式,即S2为:(00|11)|(01|10)(00|11)*(01|10)*因此,S为:(00|11)|(01|10)(00|11)*(01|10)*(01|10)(00|11)*0|(00|11)|(01|10)(00|11)*(01|10)*17解答:(1)以0开头并且以0结尾的,由0和1组成的符

8、号串。(2)|0,1*(3)由0和1组成的符号串,且从右边开始数第3位为0。(4)含3个1的由0和1组成的符号串。|0,1+,且中含有3个1 (5)包含偶数个0和1的二进制串,即|0,1*,且中有偶数个0和1 8. 解答:01Q0*Q1Q2Q3Q2Q3Q0Q1Q1Q0Q3Q29. 解答:(1) DFAM=(0,1,q0,q1,q2,q0,q2,)其中定义如下: (q0,0)=q1 (q0,1)=q0 (q1,0)=q2 (q1,1)=q0 (q2,0)=q2 (q2,1)=q0状态转换图为:(2) 正规式: 1*01*01*01* DFAM=(0,1,q0,q1,q2,q3,q0,q3,),其

9、中定义如下: (q0,0)=q1 (q0,1)=q0 (q1,0)=q2 (q1,1)=q1 (q2,0)=q3 (q2,1)=q2 (q3,1)=q3 状态转换图为:10. 解答:(1) DFAM=(0,1,q0,q1,q2,q3,q0,q3,),其中定义如下: (q0,0)=q1 (q0,1)=q2 (q1,0)=q1 (q1,1)=q3 (q2,0)=q3 (q2,1)=q1状态转换图为:(2) DFAM=(0,1,q0,q0,q0,),其中定义如下: (q0,0)=q0 (q0,1)=q0状态转换图为:11 解答:(1) (a|b)*a(a|b) 求出NFA M:确定化,得到DFA M

10、:化简:在第步中求出的DFA M中没有等价状态,因此它就是最小化的DFA M。(2) (a)b)*a(a|b)(a|b) 求NFA M: 确定化,得到DFA M:化简,在第步中求出的DFA M中没有等价状态,因此它已经是最小化的DFA M了。12.解答: 对应的NFA为: 增加状态X、Y,再确定化:IIaIbx,5A,T,Y A,T,YA,T,YBB B,T,YB,T,Y T,YT,Y 得到的DFA为: 最小化:该自动机已经是最小化的DFA了。13解答:其中a代表1元硬币,b代表5角硬币14解答:正规式为:(0|1)*(00|01) 化简:(0|1)*0(0|1)不确定的有穷自动机为:确定化,

11、并最小化得到:正规文法为:S1S | 0AA0B | 0 | 1C | 1B0B | 0 | 1C | 1C1S | 0A15.解答: 正规式:(dd*:| )dd*(.dd*| ),d代表az的字母 NFA为: DFA为:16.解答:词法分析器对源程序采取非常局部的观点,因此象C语言的语句 fi (a = f (x) ) 中,词法分析器把fi当作一个普通的标识符交给编译的后续阶段,而不会把它看成是关键字if的拼写错。 PASCAL语言要求作为实型常量的小数点后面必须有数字,如果程序中出现小数点后面没有数字情况,它由词法分析器报错。17. 解答:此时编译器认为/* then part retu

12、rn q else /* else part */是程序的注释,因此它不可能再发现else 前面的语法错误。分析 这是注释用配对括号表示时的一个问题。注释是在词法分析时忽略的,而词法分析器对程序采取非常局部的观点。当进入第一个注释后,词法分析器忽略输入符号,一直到出现注释的右括号为止,由于第一个注释缺少右括号,所以词法分析器在读到第二个注释的右括号时,才认为第一个注释处理结束。 为克服这个问题,后来的语言一般都不用配对括号来表示注释。例如Ada语言的注释始于双连字符(-),随行的结束而终止。如果用Ada语言的注释格式,那么上面函数应写成long gcd(p,q)long p,q; if (p%

13、q = 0) - then part return q else - else part return gcd(q, p%q);18. 解答:略!第4章习题解答:1,2,3,4 解答 略!5. 解答:(1) (2) (3) (4) (5) (6) (7) (8)6. 解答:(1)A: B: C: D: E:(2)A: B: C: D: E:7.解答:(1) 消除给定文法中的左递归,并提取公因子:bexprbterm or bterm btermbfactor and bfactor bfactornot bfactor | (bexpr) | true |false (2) 用类C语言写出其递

14、归分析程序:void bexpr();bterm();WHILE(lookahead =or) match (or);bterm();void bterm();bfactor();WHILE(lookahead =and)match (and);bfactor();void bfactor();if (llokahead=not) then match (not);bfactor(); else if(lookahead=() then match ();bexpr();match(); else if(lookahead =true) then match (true) else if (l

15、ookahead=false)then match (false);else error;8. 解答:消除所给文法的左递归,得G:S (L)|a L SLL ,SL | 实现预测分析器的不含递归调用的一种有效方法是使用一张分析表和一个栈进行联合控制,下面构造预测分析表:根据文法G有:First(S) = ( , a ) Follow(S) = ) , , , #First(L) = ( , a ) Follow(L) = ) First(L) = , Follow(L) = ) 按以上结果,构造预测分析表M如下:文法G是LL(1)的,因为它的LL(1)分析表不含多重定义入口。预测分析器对输入符

16、号串(a,(a,a)做出的分析动作如下:步骤栈剩余输入串输出1#S(a,(a,a)#2#)L(a,(a,a)#S (L)3#)La,(a,a)#4#)LSa,(a,a)#L SL5#)Laa,(a,a)#S a6#)L,(a,a)#7#)LS,(a,a)#L ,SL8#)LS(a,a)#9#)L)L(a,a)#S (L)10#)L)La,a)#11#)L)LSa,a)#L SL12#)L)Laa,a)#S a13#)L)L,a)#14#)L)LS,a)#L ,SL15#)L)LSa)#16#)L)Laa)#S a17#)L)L)#18#)L)#L19#)L)#20#)#L21# 9. 解答:各

17、非终结符的First集:First(S)=First(A)First(B)b=a,b, First(A)=b=b,First(B)a=a,First(C)=First(A) First(D)First(b) =a,b,cFirst(D)=ac=a,c各个候选式的First集为:First(AB)=a,b, First(bC)=bFirst() First(b)bFirst(aD)=a First(AD)=a,b,cFirst(b)=b First(aS)=aFirst(c)=c 各非终结符的Follow集的计算:Follow(S)=#Follow(D) =#Follow(A)=(First(B

18、)Follow(S)First(D) =a,#,cFollow(B)=Follow(S) =#Follow(C)=Follow(S) =#Follow(D)=Follow(B)Follow(C) =#10解答:(1) 求First和Follow集 First(E)=First(T)=(,a,b, First(E)=+, First(T)=First(F)=(,a,b, First(T)=(,a,b, , First(F)=First(P)=(,a,b, First(F)=*, First(P)=(,a,b, (计算顺序)Follow(E)= #, ) Follow(E)= Follow(E)=

19、#,) (1)(使用的产生式)Follow(T) = First(E)Follow(T) (1,2) = +),#=+,),#Follow(T)= Follow(T)=+,# (3)Follow(F)= First(T)Follow(T) (3,4) = (,a,b,+ ,),#Follow(F)= Follow(F) (5) = (,a,b,+ ,),#Follow(P)= First(F)Follow(F) (5,6) =*,(,a,b,+ ,),# (2) 证明: a. 文法不含左递归;b. 每个非终结符的各个侯选式的First集不相交;c. First(E)Follow(E)=+, #

20、,),=First(T)Follow(T)=(,a,b, +,)=First(F)Follow(F)=*, ,a,( ,+,#= 改造后的文法满足LL(1)文法的三个条件,是LL(1)文法。(3) 预测分析表如下所示。ab*+()#EETEETEETEEE+EEETTFTTFTTFTTFTTTTTTTTTTTTFFPFFPFFPFFPFFFFF*FFFFFFPPaPbPP(E)11. 解答:(1)SAbc AaBba. 文法不含左递归; b. S,A,B各候选式的First集不相交;c. First(A)Follow(A)=a,b= First(B)Follow(B)=b,=该文法为LL(1)

21、文法。(2) SAbAaB Bb a. 文法不含左递归;b. S,A,B各候选式的First集不相交;c. First(A)Follow(A)=a,b, b=b 该文法不是LL(1)文法。12. 解答: 最右推导:E=T=F=(E)=(ET)=(EF)=(Ei)= (Ti)=(T*Fi)语法树:图4.1 句型(T*Fi)的语法树 短语:(T*Fi),T*Fi,T*F,i 素短语:T*F,i最左素短语:T*F 由于E =E+T =E+T*F,故E+T*F为该文法的句型 短语:T*F、E+T*F 直接短语: T*F 句柄: T*F13. 解答:最左推导:S= (T) = (T,S) = (S,S)

22、 = (a,S) = (a,(T) = (a,(T,S) = (a,(S,S) = (a,(a,S) = (a,(a,a)最右推导:S= (T) = (T,S) = (T,(T) = (T,(T,S) = (T,(T,a) = (T,(T,a) = (T,(a,a) = (S,(a,a) = (a,(a,a)文法中S和T的FirstVT和LastVT集为:FirstVT(S)=a,( FirstVT(T)=,a, ( lastVT(S)=a, ) lastVT(T)=,a,)文法GS的算符优先关系表: 根据优先关系表,对每个终结符或#建立符号f与g,把f(和g)分成一组。根据GS的算符优先关系

23、表,画出如下的有向图。优先函数如下:用算符优先分析法分析句子(a,(a,a)。给定的输入符号串是文法的一个句子。14. 解答:(1) 该文法的拓广文法G为 0S S 1S aSAB2S BA 3A aA4A B 5B b其LR(0)项目集规范族和识别活前缀的DFA如下:I0 = SS, SaSAB, SBA, BbI1 = SSI2 = BbI3 = SaSAB, SaSAB, SBA, BbI4 = SBA, AaA, AB, BbI5 = SaSAB, AaA, AB, BbI6 = SaSAB, BbI7 = AaA, AaA, AB, BbI8 = ABI9 = SBAI10 = Sa

24、SABI11 = AaA显然,上述状态中没有出现冲突。显然,该文法是LR(0)的文法,因此也是SLR(1)的。 求各个非终结符的Follow集,以便构造分析表: Follow(S)=# Follow(S)=a,b,#Follow(A)=a,b,#Follow(B)=a,b,#构造的SLR(1)分析表如下: (2) 该文法的拓广文法G为 0S S 1S Sab 2S bR 3R S 4R a 其LR(0)项目集规范族和识别活前缀的DFA如下:I0 = SS, SSab, SbRI1 = SS, SSabI2 = SbR, RS, Ra, SSab, SbRI3 = SSabI4 = SbRI5 = RS, SSabI6 = RaI7 = SSab显然,I1和I5存在移进-归约冲突。求S和R的Follow集: Follow(S)=# Follow(R)=Follow(S)=a,#在I5中,出现的移进归约冲突,且Follow(R)a=a,不能用SLR(1)方法解决。因此,此文法不是SLR(1)文法。15. 解答:(1) 构造其拓广文法G的产生式为 0

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1