编译原理及编译程序构造答案.docx
- 文档编号:5066062
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:14
- 大小:23.79KB
编译原理及编译程序构造答案.docx
《编译原理及编译程序构造答案.docx》由会员分享,可在线阅读,更多相关《编译原理及编译程序构造答案.docx(14页珍藏版)》请在冰豆网上搜索。
编译原理及编译程序构造答案
编译原理及编译程序构造答案
【篇一:
编译原理课后习题答案】
译程序在逻辑功能上由哪几部分组成?
答:
编译程序主要由以下几个部分组成:
词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。
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|9m?
?
|d|mdd?
0|sb?
2|4|6|8e?
0|bn?
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?
123n?
nd?
n1?
nd1?
n01?
d01?
301n?
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?
iisess?
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|abb?
cb|?
(2)s?
asb|ab
2
5.给出描述下面语言的上下文无关文法。
a?
a|?
(3)s?
asd|a|?
a?
bac|?
6.设计一个最简的dfam,使其能够识别所有的被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|9c?
+|-|?
s?
b|ab
b?
1|3|5|7|9a?
ad|n
n?
2|4|6|8|bd?
0|ns?
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/ff?
(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
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)
最右推导e?
e+t?
e+t*f?
e+t*i?
e+f*i?
e+i*i?
t+i*i?
f+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)
⑵构造语法树
e最左推导构造语法树e+t
e+ti
tii
3.(p36,9)证明下面的文法是二义的:
s?
ises|is?
i
答:
对于句子iiiei有两棵不同的语法树。
因此该文法是二义的。
s?
ises?
iises?
iiies?
iiieis?
is?
iises?
iiies?
iiiei
第3章词法分析
1.设m=({x,y},{a,b},?
,x,{y})为一个非确定有限自动机nfam,其中?
定义如下:
?
(x,a)={x,y}?
(x,b)={y}
?
(y,a)=?
?
(y,b)={x,y}
试构造其相应的最小化的确定有限自动机dfam’。
答:
由?
定义可知?
(x,a),?
(y,b)均为多值函数,所以是一个非确定有限自动机。
(1)根据?
函数值,先构造
nfam
(2)确定化:
①构造dfam’的转换矩阵:
②确定dfam’的初始状态和终态:
(a)转换矩阵中i列的第一个状态①为dfam’的初始状态结点。
(b)含有y状态的子集均为dfam’的终态结点(②、③为终态结点)。
③根据dfam’的转换矩阵画出对应的状态转换图:
(3)最小化:
①首先将其划分成终态集{2,3}和非终态集{1}
②{2,3}a={2}?
{2,3},{2,3}b={2}?
{2,3}因此{2,3}已是不可再区分的,所以该dfam’已是最小化的。
2.(p64,7
(1))构造正规式1(0?
1)*101相应的dfam。
答:
(1)构造nfam。
(2
(3)由转换矩阵构造dfam
3.(p64,12(a))将下图所示的nfam转换为等价的dfam’,并将该dfa’最小化。
答:
该有限自动机状态0输入同一字符a时到达两个不同的结点,所以是nfa。
【篇三:
编译原理习题及答案(整理后)】
序分成若干个“遍”是为了
a.提高程序的执行效率
b.使程序的结构更加清晰
c.利用有限的机器内存并提高机器的执行效率
d.利用有限的机器内存但降低了机器的执行效率
2、构造编译程序应掌握
a.源程序b.目标语言
c.编译方法d.以上三项都是
3、变量应当
a.持有左值b.持有右值
c.既持有左值又持有右值d.既不持有左值也不持有右值
4、编译程序绝大多数时间花在
a.出错处理b.词法分析
c.目标代码生成d.管理表格
5、
a.汇编指令代码b.可重定位指令代码
c.绝对指令代码d.中间代码
6、使用可以定义一个程序的意义。
a.语义规则b.语法规则
c.产生规则d.词法规则
7、词法分析器的输入是
a.单词符号串b.源程序
c.语法单位d.目标程序
8、中间代码生成时所遵循的是。
a.语法规则b.词法规则
c.语义规则d.等价变换规则
9、编译程序是对。
a.汇编程序的翻译b.高级语言程序的解释执行
c.机器语言的执行d.高级语言的翻译
10、语法分析应遵循。
a.语义规则b.语法规则
c.构词规则d.等价变换规则
二、多项选择题
1、编译程序各阶段的工作都涉及到。
a.语法分析b.表格管理c.出错处理
d.语义分析e.词法分析
2、编译程序工作时,通常有阶段。
a.词法分析b.语法分析c.中间代码生成
d.语义检查e.目标代码生成
三、填空题
1、解释程序和编译程序的区别在于。
2、编译过程通常可分为5个阶段,分别是语法分析、代码优化和目标代码生成。
3、编译程序工作过程中,第一段输入是程序。
4、编译程序是指将程序的程序。
单选解答
1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。
2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。
3、对编译而言,变量既持有左值又持有右值,故选c。
4、编译程序打交道最多的就是各种表格,因此选d。
5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。
6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。
因此选a。
7、b8、c9、d10、c
多选解答
1.b、c2.a、b、c、e
填空解答
是否生成目标程序2、词法分析中间代码生成3、源程序目标代码生成4、源程序
标语言
第二章
一、单项选择题
1、文法g:
s→xsx|y所识别的语言是
a.xyxb.(xyx)*c.xnyx(n≥0)d.x*yx*
3、有限状态自动机能识别。
a.上下文无关文法b.上下文有关文法
c.正规文法d.短语文法
4、设g为算符优先文法,g的任意终结符对a、b有以下关系成立。
a.若f(a)g(b),则abb.若f(a)g(b),则ab
c.a~b都不一定成立d.a~b一定成立
a.最左推导和最右推导对应的语法树必定相同
b.最左推导和最右推导对应的语法树可能不同
c.最左推导和最右推导必定相同
d.可能存在两个不同的最左推导,但它们对应的语法树相同
6、由文法的开始符经0步或多步推导产生的文法符号序列是
a.短语b.句柄c.句型d.句子
7、文法g:
e→e+t|t
t→t*p|p
p→(e)|i
则句型p+t+i的句柄和最左素短语为。
a.p+t和ib.p和p+tc.i和p+t+id.p和t
8、设文法为:
s→sa|a
a→a|b
则对句子aba,下面是规范推导。
a.s?
sa?
saa?
aaa?
aaa?
aba?
aba
b.s?
sa?
saa?
aaa?
aaa?
aba?
aba
目
c.s?
sa?
saa?
saa?
sba?
aba?
aba
d.s?
sa?
sa?
saa?
sba?
aba?
aba
9、文法g:
s→b|∧(t)
t→t,s|s
则firstvt(t)。
a.{b,∧,(}b.{b,∧,)}c.{b,∧,(,,}d.{b,∧,),,}
10、产生正规语言的文法为
a.0型b.1型c.2型d.3型
11、采用自上而下分析,必须
a.消除左递归b.消除右递归c.消除回溯d.提取公共左因子
12、在规范归约中,用
a.直接短语b.句柄c.最左素短语d.素短语
13、有文法g:
e→e*t|t
t→t+i|i
句子1+2*8+6按该文法g归约,其值为。
a.23b.42c.30d.17
14、规范归约指
a.最左推导的逆过程b.最右推导的逆过程
c.规范推导d.最左归约的逆过程
二、多项选择题
1、下面哪些说法是错误的
a.有向图是一个状态转换图b.状态转换图是一个有向图
c.有向图是一个dfad.dfa可以用状态转换图表示
2、对无二义性文法来说,一棵语法树往往代表了。
a.多种推导过程b.多种最左推导过程c.一种最左推导过程
d.仅一种推导过程e.一种最左推导过程
3、如果文法g存在一个句子,满足下列条件
a.该句子的最左推导与最右推导相同
b.该句子有两个不同的最左推导
c.该句子有两棵不同的最右推导
d.该句子有两棵不同的语法树
e.该句子的语法树只有一个
4、有一文法g:
s→ab
a.{anbmcndm|n,m≥0}b.{anbncmdm|n,m0}
c.{anbmcmdn|n,m≥0}d.{anbncmdm|n,m≥0}
e.{anbncndn|n≥0}
5、自下而上的语法分析中,应从
a.句型b.句子c.以单词为单位的程序
d.文法的开始符e.句柄
6、对正规文法描述的语言,以下
a.0型文法b.1型文法c.上下文无关文法d.右线性文法e.左线性文法
三、填空题
1、文法中的终结符和非终结符的交集是是,它一定只出现在产生式的部。
2、最左推导是指每次都对句型中的
3、在语法分析中,最常见的两种方法一定是分析法。
4、采用
5、树代表归约过程。
6、自下而上分析法采用
7、chomsky把文法分为生和语言,并分别用和自动机识别所产生的语言。
四、判断题
r→cs
2、在自下而上的语法分析中,语法树与分析树一定相同。
()
3、二义文法不是上下文无关文法。
()
4、语法分析时必须先消除文法中的左递归。
()
5、规范归约和规范推导是互逆的两个过程。
()
6、一个文法所有句型的集合形成该文法所能接受的语言。
()
五、简答题
1、句柄2、素短语3、语法树4、归约5、推导
六、问答题
1、给出上下文无关文法的定义。
2、文法g[s]:
s→aspq|abq
qp→pq
bp→bb
bq→bc
cq→cc
(1)它是chomsky哪一型文法?
(2)它生成的语言是什么?
3、按指定类型,给出语言的文法。
l={aibj|j>i≥1}的上下文无关文法。
4、有文法g:
s→aacb|bd
a→aab|c
b→bsca|b
(1)试求句型aaabcbbdcc和aacbbdcc的句柄;
(2)写出句子acabcbbdcc的最左推导过程。
5、对于文法g[s]:
s→(l)|as|al→l,s|s
(1)画出句型(s,(a))的语法树。
(2)写出上述句型的所有短语、直接短语、句柄和素短语。
6、考虑文法g[t]:
t→t*f|f
f→f↑p|p
p→(t)|i
证明t*p↑(t*f)是该文法的一个句型,并指出直接短语和句柄。
单选[解答]
1、选c。
2、选a。
3、选c。
4、虽然a与b没有优先关系,但构造优先函数后,a与b就一定存在优先关系了。
所以,由f(a)g)(b)或f(a)g(b)并不能判定原来的a与b之间是否存在优先关系:
故选c。
5、如果文法g无二义性,则最左推导是先生长右边的枝叶:
对于d,如果有两个不同的是了左推导,则必然有二义性。
故选a。
6、选c。
7、由图2-8-1的语法树和优先关系可以看出应选b。
8、规范推导是最左推导,故选d。
9、由t→t,?
和t→(?
得firstvt(t))={(,,)};
由t→s得firstvt(s)?
firstvt(t),而firstvt(s)={b,∧,(};即
firstvt(t)={b,∧,(,,};因此选c。
10、d11、c12、b13、b14、b
多选解答1、e、a、c2、a、c、e3、b、c、d4、a、c5、b、c6、a、b、c、d、e填空解答1、空集终结符右
2、最左
3、自上而上自下而上
4、自上而上
5、语法分析
6、移进接受
7、42型3型上下文无关语言正规语言下推自动机有限
判断解答1、对2、错3、错4、错5、错6、错
简答[解答]
1、句柄:
一个句型的最左直接短语称为该句型的句柄。
2、素短语:
至少含有一个终结符的素短语,并且除它自身之外不再含任何更小的素短语。
3、语法树:
满足下面4个条件的树称之为文法g[s]的一棵语法树。
①每一终结均有一标记,此标记为vn∪vt中的一个符号;
②树的根结点以文法g[s]的开始符s标记;
③若一结点至少有一个直接后继,则此结点上的标记为vn中的一个符号;
④若一个以a为标记的结点有k个直接后继,且按从左至右的顺序,这些结点的标记分别为x1,x2,?
xk,则a→x1,x2,?
xk,必然是g的一个产生式。
问答1[解答]
一个上下文无关文法g是一个四元式(vt,vn,s,p),其中:
●vt是一个非空有限集,它的每个元素称为终结符号;
●s是一个非终结符号,称为开始符号;
2[解答]
(1)由于产生式左部存在终结符号,且所有产生式左部符号的长度均小于等于产生式右部的符号长度,所以文法g[s]是chomsky1型文法,即上下文有关文法。
(2)按产生式出现的顺序规定优先级由高到低(否则无法推出句子),我们可以得到:
s?
abq?
abc
s?
aspq?
aabqpq?
aabpqq?
aabbqq?
aabbcq?
aabbcc
s?
aspq?
aaspqpq?
aaabqpqpq?
aaabpqqpq?
aaabpqpqq?
aaappqqq?
aaabbpqqq?
aaabbqqq?
aaabbbcqq?
aaabbbccq?
aaabbbccc
?
?
于是得到文法g[s]生成的语言l={anbncn|n≥1}
3【解答】
(1)由l={aibj|j>i≥1}知,所求该语言对应的上下文无关文法首先应有s→asb型产生式,以保证b的个数不少于a的个数;其次,还需有s→sb或s→bs型的产生式,用以保证b的个数多于a的个数;也即所求上下文无关文法g[s]为:
g[s]:
s→asb|sb|b
4【解答】
(1)分别画出对应两句型的语法树,如图2-8-2所示
句柄:
aabbd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 编译程序 构造 答案