第一章
1.典型的编译程序在逻辑功能上由哪几部分组成?
答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。 2. 实现编译程序的主要方法有哪些?
答:主要有:转换法、移植法、自展法、自动生成法。
3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式?
答:编译法、解释法。
4. 编译方式和解释方式的根本区别是什么?
答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快;
解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。
1
第二章
1. 乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关
系如何?
答:1)0型文法、1型文法、2型文法、3型文法。
2)
2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。 答:
Z?SME | B
S?1|2|3|4|5|6|7|8|9 M?? | D | MD D?0|S B?2|4|6|8 E?0|B N? D|ND
D? 0|1|2|3|4|5|6|7|8|9
请给出句子123、301和75431的最右推导和最左推导。 答:N?ND?N3?ND3?N23?D23?123
N?ND?NDD?DDD?1DD?12D?123 N?ND?N1?ND1?N01?D01?301 N?ND?NDD?DDD?3DD?30D?301
N?ND?N1?ND1?N31?ND31?N431?ND431?N5431?D5431?75431
N?ND?NDD?NDDD?NDDDD?DDDDD?7DDDD?75DDD?754DD?7543D?75431
3. 设文法G为:
4. 证明文法 S?iSeS|iS| i是二义性文法。 答:对于句型iiSeS存在两个不同的最左推导:
S?iSeS?iiSes S?iS?iiSeS
所以该文法是二义性文法。 (1) L1={anbnci |n>=1,i>=0 } (2) L2={aibj|j>=i>=1} (3) L3={anbmcmdn |m,n>=0} 答:
(1) S?AB
A?aAb | ab B?cB | ?
(2) S?ASb |ab
2
5. 给出描述下面语言的上下文无关文法。
A?a | ?
(3) S?aSd | A | ?
A?bAc | ?
6. 设计一个最简的DFA M,使其能够识别所有的被3整除的无符号十进制整数。 答:
2|5|80|3|6|91|4|70|3|6|9011|4|720|3|6|92|5|82|5|81|4|7
7. 设计一个DFA,使其能够接受被4整除的二进制数。 答:
001110102103
8. 写出表达下列各项的正则表达式。
(1)二进制数且为5的倍数。
(2)Σ={a,b,c},第一个a位于第一个b之前的字符串。 (3)Σ={a,b,c},包含偶数个a的字符串。
(4)Σ={0,1},不包含11子串的字符串。 答: (1) 可以先画出相应的有限自动机: 101101AB10CD00E
添加新的开始状态S和终止状态T: 3
101101S?A?B10CD00ET 根据以上自动机,列出以下方程: ① 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=0100B+0101C+1A ? C=xB+yA 其中x=(01*01)*01*00 y=(01*01)*1 ⑤代入③? B=0C+10B+11C ? B=(0|11)C+10B ? B=(10)*(0|11)C 将C=xB+yA代入上式? B=uB+vA ? B=u*vA 其中u=(10)*(0|11)x v=(10)*(0|11)y 将B=u*vA代入②? A=0*1u*vA+0*T **** ? A=(01uv)0T 将A代入①? S=(0*1u*v)*0*T 串(0*1u*v)*0*即为所求。 (2)该题目理解为:至少有一个a和一个b,且a出现在b的前面(可以有间隔),则答案为: c*a(a|c)*b(a|b|c)* (3)((b|c)*a(b|c)*a)*(b|c)* (a(b|c)*a | b | c)* (4)(0|10)*(1|?) 4