编译原理及编译程序构造答案
【篇一:编译原理课后习题答案】
译程序在逻辑功能上由哪几部分组成?
答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。 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整除的无符号十进制整数。 答:
1|4|7
7. 设计一个dfa,使其能够接受被4整除的二进制数。 答:
8. 写出表达下列各项的正则表达式。
(1)二进制数且为5的倍数。
3
4
第三章
1. 词法分析器的功能是什么?
答:读源程序的字符序列,逐个拼出单词,并构造相应的内部表示token;同时检查源程序中的词法错误。
2. 试分析分隔符(空格、跳格及回车等)对词法分析的影响。
答:空格、跳格、回车等分隔符号对词法分析不起作用,可以删除。但是回车符号可以用于错误定位,所以在删除回车符号前需要统计回车的个数。 3. 给出识别c语言全部实型常数的自动机。
答:(+|-|?)([1-9][0-9]*|0)(.[0-9][0-9]*|?) (e(+|-|?)[0-9][0-9]*) 4. 写出识别c语言中所有单词的lex程序。
答: l=[a-z] | [a-z] d=[0-9] d1=[1-9] %% (l|_)(l|d|_)* {return (1);} d1d* {return (2);} + {return (3);} ……
5
【篇二:编译原理作业参考答案】
1、解释下列各词
源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。 源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。
目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。目标程序 (结果程序)一般可由计算机直接执行。
低级语言:机器语言和汇编语言。
高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。
翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目
标语言程序),后者与前者在逻辑上是等价的。其中包括:编译程序,解释程序,汇编程序。 编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言), 然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。
解释程序: 以该语言写的源程序作为输入,但不产生目标程序。按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。
2、什么叫“遍”?
指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。
3、简述编译程序的基本过程的任务。
编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。
词法分析:输入源程序,进行词法分析,输出单词符号。
语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。
中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。
优化:对中间代码进行优化处理。
目标代码生成:把中间代码翻译成目标语言程序。 4、编译程序与解释程序的区别?
编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。 5、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗?
编译程序的5个阶段中,词法分析,语法分析,语义分析和代码生成生成是必须完成的。而中间代码生成和代码优化并不是必不可少的。优化的目的是为了提高目标程序的质量,没有这一部分工作,仍然能够得到目标代码。
6、编译程序的分类
程序设计语言一般可分为三大类 目前基本分为:诊断编译程序,优化编译程序,交叉编译程序,可变目标编译程序。
第2章 高级语言及其语法描述
1(p36)令文法为
n ? d?nd
d ? 0?1?2???9
(1)文法描述的语言l(g)是什么?
(2)给出句子34,568的最左推导和最右推导。 答:(1)
l(g)={???为可带前导0的正整数}
+
或l(g)={(0?1?2???9)} 或 l(g)={???为数字串} (2)
最左推导:n?nd?dd?3d?34
n?nd?ndd?ddd?5dd?56d?568
最右推导:n?nd?n4?d4?34
n?nd?n8?nd8?n68?d68?568
2*.写出一个文法,使其语言是奇数集,且每个奇数是不以0开头。 答:
s ? cab|b(考虑了正负号)
a ? 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | aa | a0 | ? b ? 1|3|5|7|9 c ? +|-|? s ? b | ab
b ? 1 | 3 | 5 | 7 | 9 a ? ad | n
n ? 2 | 4 | 6 | 8 | b d ? 0 | n s ? c | abc
c ? 1 | 3 | 5 | 7 | 9
a ? 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
或:(未考虑正负号)
或:(未考虑正负号)
b ? ba | b0 |?
2.(p36, 8)令文法为 e ? t?e+t?e-t
t ? f?t*f?t/f f ? (e)?i
(1)给出该文法的vn、vt和s。
(2)给出i+i*i,i*(i+i)的最左推导和最右推导。 (3)给出i+i+i,i+i*i的语法树。 答:(1)
vn = { e, t, f }
vt = { +, -, *, /, (, ), i }
s = e (2)
最左推导e?e+t?t+t?f+t?i+t?i+t*f?i+f*f?i+i*f?i+i*i
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论