资源描述:
《编译原理课后习题答案.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第一章1.典型的编译程序在逻辑功能上由哪几部分组成?答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。2.实现编译程序的主要方法有哪些?答:主要有:转换法、移植法、自展法、自动生成法。3.将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式?答:编译法、解释法。4.编译方式和解释方式的根本区别是什么?答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快;解释方式:在执行时,必须源程序和解释程序同时参与才能运
2、行,其不产生可执行程序文件,效率低,执行速度慢。28第二章1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关系如何?答:1)0型文法、1型文法、2型文法、3型文法。2)2.写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。答:ZàSME
3、BSà1
4、2
5、3
6、4
7、5
8、6
9、7
10、8
11、9Màe
12、D
13、MDDà0
14、SBà2
15、4
16、6
17、8Eà0
18、B3.设文法G为:NàD
19、NDDà0
20、1
21、2
22、3
23、4
24、5
25、6
26、7
27、8
28、9请给出句子123、301和75431的最右推导和最左推导。答:NÞNDÞN3ÞND3ÞN23ÞD23Þ123NÞNDÞNDDÞDDDÞ
29、1DDÞ12DÞ123NÞNDÞN1ÞND1ÞN01ÞD01Þ301NÞNDÞNDDÞDDDÞ3DDÞ30DÞ301NÞNDÞN1ÞND1ÞN31ÞND31ÞN431ÞND431ÞN5431ÞD5431Þ75431NÞNDÞNDDÞNDDDÞNDDDDÞDDDDDÞ7DDDDÞ75DDDÞ754DDÞ7543DÞ754314.证明文法SàiSeS
30、iS
31、i是二义性文法。答:对于句型iiSeS存在两个不同的最左推导:SÞiSeSÞiiSesSÞiSÞiiSeS所以该文法是二义性文法。5.给出描述下面语言的上下文无关文法。(1)L1={anbnci
32、n>=1,i>=0}(
33、2)L2={aibj
34、j>=i>=1}(3)L3={anbmcmdn
35、m,n>=0}答:(1)SàABAàaAb
36、abBàcB
37、e(2)SàASb
38、ab28Aàa
39、e(1)SàaSd
40、A
41、eAàbAc
42、e6.设计一个最简的DFAM,使其能够识别所有的被3整除的无符号十进制整数。答:7.设计一个DFA,使其能够接受被4整除的二进制数。答:8.写出表达下列各项的正则表达式。(1)二进制数且为5的倍数。(2)Σ={a,b,c},第一个a位于第一个b之前的字符串。(3)Σ={a,b,c},包含偶数个a的字符串。(4)Σ={0,1},不包含11子串的字符串。答:(1)可以先画出
43、相应的有限自动机:添加新的开始状态S和终止状态T:28根据以上自动机,列出以下方程:①S=A②A=0A+1B+T③B=0C+1D④C=0E+1A⑤D=0B+1C⑥E=0D+1E解以上方程组:⑥ÞE=1*0D②ÞA=0*1B+0*T⑥代入④ÞC=01*0D+1A⑤代入④ÞC=01*00B+01*01C+1AÞC=xB+yA其中x=(01*01)*01*00y=(01*01)*1⑤代入③ÞB=0C+10B+11CÞB=(0
44、11)C+10BÞB=(10)*(0
45、11)C将C=xB+yA代入上式ÞB=uB+vAÞB=u*vA其中u=(10)*(0
46、11)xv=(10)*(0
47、
48、11)y将B=u*vA代入②ÞA=0*1u*vA+0*TÞA=(0*1u*v)*0*T将A代入①ÞS=(0*1u*v)*0*T串(0*1u*v)*0*即为所求。(2)该题目理解为:至少有一个a和一个b,且a出现在b的前面(可以有间隔),则答案为:c*a(a
49、c)*b(a
50、b
51、c)*(3)((b
52、c)*a(b
53、c)*a)*(b
54、c)*(a(b
55、c)*a
56、b
57、c)*(4)(0
58、10)*(1
59、e)28第三章1.词法分析器的功能是什么?答:读源程序的字符序列,逐个拼出单词,并构造相应的内部表示TOKEN;同时检查源程序中的词法错误。1.试分析分隔符(空格、跳格及回车等)对词
60、法分析的影响。答:空格、跳格、回车等分隔符号对词法分析不起作用,可以删除。但是回车符号可以用于错误定位,所以在删除回车符号前需要统计回车的个数。2.给出识别C语言全部实型常数的自动机。答:(+
61、-
62、e)([1-9][0-9]*
63、0)(.[0-9][0-9]*
64、e)(E(+
65、-
66、e)[0-9][0-9]*)4.写出识别C语言中所有单词的LEX程序。答:L=[A-Z]
67、[a-z]D=[0-9]D1=[1-9]%%(L
68、_)(L
69、D
70、_)*{return(1);}D1D*{return(2);}+{return(3);}……28第四章1.设有如下文法G[S