《编译原理习题答案.ppt》由会员分享,可在线阅读,更多相关《编译原理习题答案.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、习题及解答:习题及解答:第一章1.什么是编译程序编译程序?什么是解释程序解释程序?二者的区别区别?l1、编译程序:l是一种翻译程序,它特指把某种高级程序设计语言翻译成具体计算机上的低级程序设计语言。l2、解释程序:l解释程序(interpreter)也是一种翻译程序,将某高级语翻译成具体计算机上的低级程序设计语言.l两者区别:l(1)前者有目标程序而后者无目标程序;l(2)前者运行效率高而后者便于人机对话2、叙述编译程序的逻辑结构逻辑结构和实现机制实现机制根据语言和环境的不同,编译程序实现时是把图中的各阶段划分成若干遍;典型的情况是两遍的编译程序:第一遍:词法分析、语法分析和语义分析。即前端完
2、成分析,一般与机器无关。第二遍:目标代码生成和目标代码优化。即后端完成综合,一般与机器有关。每遍中的各阶段的工作是穿插进行的,例如:使语法分析器处于核心位置,而把词法分析器作为子程序;当语法分析需要下一个单词时,就调用词法分析器,识别一个单词。词法词法分析分析语法语法分析分析语义语义分析分析代代 码码生成生成源源语语言言目目标标语语言言 错错 误误 处处 理理 符符 号号 表表 管管 理理优化优化处理处理第二章1、P36:8;i+i*i最左E-E+T-T+T-F+T-i+T-i+T*F-i+F*F-i+i*F-i+i*ii+i*i最右E-E+T-E+T*F-E+T*i-E+F*i-E+i*i-
3、T+i*i-F+i*i-i+i*ii*(i+i)最左E-T-T*F-F*F-i*F-i*(E)-i*(E+T)-i*(T+T)-i*(F+T)-i*(i+T)-i*(i+F)-i*(i+i)i*(i+i)最右E-T-T*F-T*(E)-T*(E+T)-T*(E+F)-T*(E+i)-T*(T+i)-T*(F+i)-T*(i+i)-F*(i+i)-i*(i+i)2、试构造下述语言L的文法:L=ambn|m0,n1;S-ABA-Aa|B-Bb|borS-ABA-aA|B-bB|b3、试求下述文法G(Z)所定义的语言:G(Z):Z-b|bB,B-bZZ=bZ=bB=bbZ=bbbZ=bB=bbZ=b
4、bbB=bbbbZ=bbbbbZ=b2n-1,n1第三章1.P64,8(1),(3)给出正规表达式:以01结尾的二进制数串分析题意,要求的是二进制小,即由0和1构成的串,并且必须以01结尾,所以本题可以分两部分去完成,一部分实现由0和1构成的任意串,一部分即01,然后将它们连接到一起就可以了,所以本题的解答是:(0|1)*01。(3)包含奇数个1或奇数个0的二进制数串。本题求二进制串,并且要求包含奇数个0或奇数个1,由于0和1都可以在二进制串中任何地方出现,所以本题只需要考虑一种情况,另外一种情况也可以类似求得。考虑包含奇数个0的字符串:由于只关心0的个数的奇偶数,我们可以把二进制串分成多段来
5、考虑,第1段为二进制串的开始到第1个0为止,这一段包含1个0,并且0的前面有0个或多个1,对于剩下的二进制串按照每段包含两个0的方式去划分,即以0开始,以0结尾,中间可以有0个或多个1,和果一个二进制串被这样划分完后,剩下的部分如果全部是全1串(这些全1串在前面划分的串之间或最后),则该二进制串就具有奇数个0,所以该二进制串可以这样描述:以第1段(1*0)开始,后面由全1串(1*)以及包含两个0的串(01*0)组成,所以包含奇数个0的正规表达式为:1*0(1|01*0)*,本题的解答则是:1*0(1|01*0)*|0*1(0|10*1)*。2.给定正规式(a|b)*a(a|b),构造其最小DF
6、AM。(参见书图3.7)首先将其分为终态集3,4和非终态集0,1,2,由于0a=1,0b=2,2a=1,2b=2都是集合0,1,2的子集,但1a=3,1b=4,属于3,4的子集,故将其划分为0,2,1。对3、4也是如此,即最后划分为:0,2、1、3、4,按顺序重新命名为1、2、3、4。(见书p57页)第四章1.考虑下面文法G1:S-a|(T),T-T,S|S(1)消去G1的左递归。(书上p69)(2)改写后的文法是否为LL(1)文法?(书P73)给出预测分析表(书P76)。(1)消除左递归:S-a|(T)T-STT-,ST|(2)FIRST(S)=a,(FIRST(T)=a,(FIRST(T)
7、=,First(a)=a,First()=,First(T)=(S的所有候选的首符集不相交(First和Follow集的构造方法见书P78)First(,ST)=,First()=,T的所有候选的首符集不相交Follow(T)=Follow(T)=)Follow(S)=),#first(T)Follow(T)=a(),#SSaSS(T)TTSTTSTTSTTTT,ST2.P82,第4题。对文法S-SS(S)|ABB-S|AaCC(S)|(1)构造LL(1)分析表(2)给出对句子a-a(a)的分析过程。(1)First(S)=-(aFirst(A)=aFirst(B)=-First(C)=(Fo
8、llow(S)=)#Follow(B)=)#Follow(A)=-)#Follow(C)=-)#LL(1)分析表-a()#SS-SS-ABS-(S)BB-SB-B-AA-aCCC-C-(S)C-C-步骤符号栈输入串所用产生式0#Sa-a(a)#1#BAa-a(a)#S-AB2#BCaa-a(a)#A-aC3#BC-a(a)#4#B-a(a)#C-5#S-a(a)#B-S6#S-a(a)#7#S-a(a)#S-S8#Sa(a)#9#BAa(a)#S-AB10#BCaa(a)#A-aC11#BC(a)#12#B)S(a)#C-(S)13#B)S(a)#14#B)S(a)#15#B)Sa)#16#B
9、)BAa)#S-AB17#B)BCaa)#A-aC18#B)BC)#19#B)B)#C-20#B)#B-21#B)#22#B#23#B-P133.1令文法G1为:E-E+T|TT-T*F|FF-(E)|I证明E+T*F是它的一个句型,指出这个句型的所有短语,直接短语和句柄答案:因为E=E+T=E+T*F所以E+T*F是该文法的一个句型。短语:E+T*F,T*F,直接短语:T*F句柄:T*F第五章P133.3S-a|(T)T-T,S|S(1)计算FIRSTVT和LASTVT.(2)计算优先关系。以上文法是一个优先文法吗?(3)给出输入串(a,(a,a)的算符优先分析过程。答案:(1)FIRSTV
10、T(S)=a(FIRSTVT(T)=,A(LASTVT(S)=A)LASTVT(T)=,A)(2)a(),a(=,(3)第七章1.给出下面表达式的逆波兰表示a*(-b+c)ab-c+*a+b*(c+d/e)abcde/+*+2.请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。三元式序列:(1)(+,a,b)(2)(,(1),-)(3)(+,c,d)(4)(*,(2),(3)(5)(+,a,b)(6)(+,(5),c)(7)(-,(5),(6)三元式表 间接码表(1)(+,a,b)(1)(2)(,(1),-)(2)(3)(+,c,d)(3)(4)(*,
11、(2),(3)(4)(5)(+,(1),c)(1)(6)(-,(4),(5)(5)(6)四元式序列:(1)(+,a,b,T1)(2)(,T1,-,T2)(3)(+,c,d,T3)(4)(*,T2,T3,T4)(5)(+,a,b,T5)(6)(+,T5,c,T6)(7)(-,T4,T6,T7)P218.4:写出下面赋值语句:A:=B*(-C+D)的三地址代码。答案:T1:=-CT2:=T1+DT3:=B*T2A:=T3P218.6写出布什尔Aor(Bandnot(CorD)的四元式序列(1)(jnz,A,-,0)(2)(j,-,-,3)(3)(jnz,B,-,5)(4)(j,-,-,0)(5)(
12、jnz,c,-,4)(6)(j,-,-,7)(7)(jnz,d,-,5)(8)(j,-,-,1)最后E.turelist=1,8,E.falelish=4,5,7P218.7:把下面的语句翻译成四元式序列:While AC and BD doIf A=1 then C:=C+1 elsewhile A=D do A:=A+2;.(1)(j,A,C,3)(2)(j,-,-,16)(3)(j,B,D,5)(4)(j,-,-,16)(5)(j=,A,1,7)(6)(j,-,-,10)(7)(+,C,1,T1)(8)(:=,T1,-,C)(9)(j,-,-,1)(10)(j=,A,D,12)(11)(
13、j,-,-,1)(12)(+,A,2,T2)(13)(:=,T2,-,A)(14)(j,-,-,10)(15)(j,-,-,1)(16)第十章P306.3:试对以下基本块B1和B2:B1:B2:A:=B*CB:=3D:=B/CD:=A+CE:=A+DE:=A*CF:=2*EF:=D+EG:=B*CG:=B*FH:=G*GH:=A*CF:=H*GI:=A*CL:=FJ:=H+IM:=LK:=B*5L:=K+JM:=L分别应用DAG对他们进行优化,并就以下两种情况分别写出优化后的四元式序列。(1)假设只有G,L,M在基本块后面还要被引用。(2)假设只有L在基本块后面还要被引用。P306.3:(1)假设只有G,L,M在基本块后面还要被引用。B1:B2:G:=B*CD:=A+CH:=G*GE:=A*CL:=H*GF:=D+EM:=LG:=3*FL:=15+FM:=L(2)假设只有L在基本块后面还要被引用。B1:B2:G:=B*CD:=A+CH:=G*GE:=A*CL:=H*GF:=D+EL:=15+FBA*/A,GDH*F,L,MFE+2B1的DAG图CCD,HGF,JKL,MBE,J+*+315B2的DAG图
限制150内