编译原理习题答案.ppt
《编译原理习题答案.ppt》由会员分享,可在线阅读,更多相关《编译原理习题答案.ppt(62页珍藏版)》请在三一办公上搜索。
1、习题16试用各种不同的形式表示法描述1的一切精度 的近似值集合。解:省略表示法 1.3,1.33,1.333,描述表示法 1.3i|i1或1.3i|i=1 错误:x|x=1+310-i|i=1,因为形式表示不应涉及任何含义。错误:GN:N:=1.M M:=M3 M:=3,因为文法仅一组重写规则,不是语言。若给出答案:L(GN),正确,但不简洁,7.设字母表x=0,1,2,3,4,5,6,7,X+与X*各是什么?各举出4个不同长度的符号串作为例子。解:X是字母表x的正闭包,X*是字母表的闭包,X*=X+X+=0,1,00,01,123,345,1234,2345,因此是一切可能带前导0的八进制数
2、的集合 X*=,0,1,00,01,12,345,3456,X+:0,1,00,123 X*:,1,00,123,习题22设文法G的规则是:=a|b|c|a|c|0|1 试写出VT与VN,并对下列符号串a、ab0、a0c01、0a、11与aaa给出可能的推导。解:VT=a,b,c,0,1 VN=a:=a ab0:=0 不能直接推导出 b0,因此不能直接推导出ab0(不能写:=0=b0 不能推导出ab0)a0c01:=1=01=c01=0c01=a0c01 0a:=a 不能直接推导出0a(不能写:=a=0a 不能推导出0a)11:=1 不能直接推导出11(不能写:=1=11 不能推导出11)aa
3、a:=a=aa=aaa,3设GE:E:=T|E+T|E-T T:=F|T*F|T/F F:=(E)|i 1)试给出关于(i)、i*i-i与(i+i)/i的推导。2)证明E+T*F*i+I 是该文法的句型,然后列出它的一切短语与简单短语。解:1)给出推导 E=T=F=(E)=(T)=(F)=(i)不能写:E=T=F=(E)=(i)可以写:E=T=F=(E)=+(i)E=E-T=T-T=T*F-T=F*F-T=i*F-T=i*i-T=i*i-F=i*i-i(最左推导)或 E=E-T=E-F=E-i=T-i=T*F-i=T*i-i=F*i-i=i*i-i(最右推导),E=T=T/F=F/F=(E)/
4、F=(E+T)/F=(T+T)/F=(F+T)/F=(i+T)/F=(i+F)/F=(i+i)/F=(i+i)/i(最左推导)或 E=T=T/F=T/i=F/i=(E)/i=(E+T)/i=(E+F)/i=(E+i)/i=(T+i)/i=(F+i)/i=(i+i)/i(最右推导),2)证明E+T*F*i+i是该文法的句型:E=E+T=E+T+T=E+T*F+T=E+T*F*F+T=E+T*F*i+T=E+T*F*i+F=E+T*F*i+i或E=E+T=E+F=E+i=E+T+i=E+T*F+i=E+T*i+i=E+T*F*i+i即,E=*E+T*F*i+i,所以是该文法的句型。因为 E=*E
5、E=+E+T*F*i+i E=*E+i E=+E+T*F*i E=*E+T+i T=+T*F*i E=*E+T*F*i+T T=+i E=*E+T*i+i T=T*F E=*E+T*F*F+F F=i(=+包括=)所以 句型E+T*F*i+i中 相对于E的短语有 E+T*F*i+i和E+T*F*i 相对于T的短语有T*F*i、T*F和i 相对于F的短语有i所以 句型E+T*F*i+i中 相对于T的简单短语有T*F 相对于F的简单短语有i,不能用画语法分析树的方法来寻找短语,因按教学进度,还未讲到语法分析树。简单短语可如下寻找:首先寻找与规则右部相同的子符号串,把它归约成相应的非终结符号后,看是
6、否是句型,如果仍是,则此子符号串是简单短语,否则不是。例如,子符号串E+T,可归约成E,但归约后成为E*F*i+i,显然不是句型,所以,E+T不是简单短语。对于短语,类似地寻找,即,先找子符号串,看它能否归约到某个非终结符号,再看归约后得到的新符号串是否是句型,是,则是短语,否则,不是短语。当在学习了语法分析树之后,可以也应该使用语法分析树来寻找短语与简单短语。,2)ambn|nm0解:可把ambn(nm0)写成ambmbn-m。易见可有文法GS:S:=Sb|Ab A:=ab|aAb 也可以写出下列文法:GS:S:=ab2|Sb|aSb 或GS:S:=aSbaBb B:=Bbb 可见给定一个语
7、言,可以为它构成若干个不同的文法。,习题34通常程序设计语言包含一些嵌套结构,例如,平衡的括号对,以及对应的if与else等。试简要说明为什么这些结构不能用正则文法描述。答:通常程序设计语言必定包含一些嵌套结构,例如,平衡的括号对,以及对应的if与else等。它们的存在必定因下列规则的必定存在:E:=E+T|T T:=T*F|F F:=(E)|i 以及 S:=if(E)S else S 因此,E=*xEy x,y 与 S=*uSv u,v,即,E与S等必定是具有自嵌套特性的非终结符号。因此通常的程序设计语言的文法必具有自嵌套特性的非终结符号,也就是说不可能是正则文法。,5下列文法中哪一个是自嵌
8、套的,请说明理由。对于非自嵌套文法给出等价的正则文法。G1=(A,B,C,a,b,P1,A)P1:A:=CB|b B:=CA C:=AB|a答:因存在自嵌套的非终结符号B:B=CA=ABA 即,B=*ABA,A,所以文法G1是自嵌套的。G2=(A,B,C,a,b,P2,A)P2:A:=CB|Ca B:=bC C:=aB|b答:因不可能得到推导:A=*xAy,其中,对于B与C,情况类似,所以A、B与C都不是自嵌套的非终结符号,文法G2是非自嵌套的文法。为构造等价的正则文法,首先确定相应语言。,C=aB=abC=abaB=ababC=(ab)iC=(ab)ib,即,C=*(ab)ibB=bC=ba
9、B=(ba)iB=(ba)ibC=*(ba)ib(ab)jb 即,B=*(ba)ib(ab)jb A=CB=*(ab)ib(ba)jb(ab)kb 又,A=Ca=(ab)iba 即,A=*(ab)iba,所以,L(G2)=(ab)ib(ba)jb(ab)kb|i,j,k0(ab)i ba|i0对于文法G2,可以采用图示法给出相应的正则文法a b a bab b a 可给出如下的规则:A A:=a A:=Ba B:=Ab B C:=Bb S:=Ca A B C S,显然,S=Ca=Bba=Abba=Babba=Ababba=Bababba=B(ab)i-1ba=(ab)iba即,S=*(ab)i
10、ba(i=1)。为使i=0,让C:=b,因此,对于(ab)iba|i=0有下列规则:S:=Ca C:=Bb|b B:=Ab A:=Ba|a 对于(ab)ib(ba)jb(ab)kb|i,j,k=0可类似地给出一组规则,这里不拟详细给出。只是请注意:可利用前面的规则以减少规则的个数。,习题44试用不同的方法消去文法G:I:=Ia|Ib|c 的 规则左递归。解:步骤1 判定文法是规则左递归 步骤2 消去规左递归。步骤3 方法1 改写规则左递归成右递归。等价文法G为:I:=cI I:=(a|b)I|方法2 改写成扩充BNF表示法.应用规则1提因子有:I:=I(a|b)|c,应用规则2有I:=ca|b
11、 等价文法G 为:I:=ca|b,5试消去文法GW:W:=A0 A:=A0|W1|0 的 文法左递归与规则左递归。解:步骤1 判定文法是文法左递归还是规则左递归 步骤2 判定文法是文法左递归,所以按相应算 法消去文法左递归如下。步骤2.1:把终结符排序成U1=W,U2=A(n=2)步骤2.2:执行循环 i=1 j=1:ji 1 不执行关于j的循环,且关于U1=W 不存在规则左递归。i=2 j=1,有规则 A:=W1|A0|0形如U2:=U1,把U1:=r1,即,把W:=A0代入得:A:=A01|A0|0 即,A:=A(01|0)|0 j=2,ji-1 消去关于U2=A的规则左递归有 A:=0A
12、,A:=(01|0)A|,步骤3 最后得到消去左递归的等价文法GW:W:=A0 A:=0A A:=(01|1)A|说明:如果在第二步中,把原文法等价变换成扩充表示法,则最终的等价文法是 GW:W:=A0 A:=001|0,6试消去文法GS:S:=Qc|Rd|c Q:=Rb|Se|b R:=Sa|Qf|a解:步骤1 首先判定是文法左递归还是规则左递归 步骤2 是文法左递归,按相应算法处理如下。步骤2.1 把非终结符号排序成 U1=S U2=Q U3=R(n=3)步骤2.2 执行循环:i=1 j=1:ji 1,不执行关于j的循环,且关于U1=S 不存在规则左递归。i=2 j=1,有规则Q:=Se|
13、Rb|b,形如U2:=U1,把U1:=r1即,把S:=Qc|Rd|c 代入,得:Q:=(Qc|Rd|c)e|Rb|b,整理后 Q:=Qce|Rde|Rb|ce|b j=2,ji-1 对U2其消去规则左递归,得 Q:=(R(de|b)|ce|b)Q Q:=ceQ|,(按扩充表示法,有 Q:=(Rb|Rde|ce|b)ce)i=3 j=1,有规则R:=Sa|Qf|a,形如U3:=U1形,把U1:=r1,即,S:=Qc|Rd|c代入:R:=(Qc|Rd|c)a|Qf|a,整理后,R:=Rda|Qca|Qf|ca|a 注意:j循环还未结束,不能消去Ui=R的规则左递归!j=2,有规则R:=Rda|Qc
14、a|Qf|ca|a,形如U3:=U2,把 U2:=r2,即,把Q:=(R(b|de)|ce|b)Q 代入,(按扩充表示法代入的是 Q:=(Rb|Rde|ce|b)ce)所以 R:=Rda|(R(b|de)|ce|b)Q(ca|f)|ca|a,整理:R:=R(b|de)Q(ca|f)|da)|(ce|b)Q(ca|f)|ca|a j=3,ji-1 消去关于U3=R的规则左递归,得:R:=(ce|b)Q(ca|f)|ca|a)R R:=(b|de)Q(ca|f)|da)R|(当按扩充表示法时是:R:=(ce|b)Q(ca|f)|ca|a)(b|de)Q(ca|f)|da),步骤3 最后消去了左递归
15、的等价文法GS:S:=Qc|Rd|c Q:=(R(b|de)|ce|b)Q Q:=ceQ|R:=(b|ce)Q(ca|f)|ca|a)R R:=(b|de)Q(ca|f)|da)R|(按扩充表示法时是GS:S:=Qc|Rd|c Q:=(Rb|Rde|ce|b)ce R:=(ce|b)Q(ca|f)|ca|a)(b|de)Q(ca|f)|da),习题51.设有文法GS:S:=aAcB|BdS B:=aScA|cAB|b A:=BaB|aBc|a 试对下列符号串:1)aabcccab 2)ababccbb 进行句型分析,识别是否是文法GS的句子。当是句子时,给出 最左推导、最右推导与相应的语法分析
16、树。解:1)建立最左推导如下:S=aAcB=aaBccB=aabccB=aabcccAB=aabcccaB=aabcccab 即,S=*aabcccab 因此,aabcccab是该文法的句子。最右推导如下:S=aAcB=aAccAB=aAccAb=aAccab=aaBcccab=aabcccab语法分析树:,画语法分析树并不一定要先写出推导,事实上,根据所给符号串的形式来选择合适的规则便可。例如,输入符号串是(i),不包含if,自然选择 I:=E,之后,因有(与),自然选E:=(E),等等。对于输入符号串if i then i else(i),自然选择I:=if B T。其他情况类似。,3.为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 习题 答案
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5812680.html