当前位置:文档之家› 编译原理作业参考答案

编译原理作业参考答案

第1章引言1、解释下列各词源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。

源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。

目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。

目标程序(结果程序)一般可由计算机直接执行。

低级语言:机器语言和汇编语言。

高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。

如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。

翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目标语言程序),后者与前者在逻辑上是等价的。

其中包括:编译程序,解释程序,汇编程序。

编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言),然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。

解释程序: 以该语言写的源程序作为输入,但不产生目标程序。

按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。

2、什么叫“遍”指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。

3、简述编译程序的基本过程的任务。

编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。

词法分析:输入源程序,进行词法分析,输出单词符号。

语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。

中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。

优化:对中间代码进行优化处理。

目标代码生成:把中间代码翻译成目标语言程序。

4、编译程序与解释程序的区别编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。

5、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗编译程序的5个阶段中,词法分析,语法分析,语义分析和代码生成生成是必须完成的。

而中间代码生成和代码优化并不是必不可少的。

优化的目的是为了提高目标程序的质量,没有这一部分工作,仍然能够得到目标代码。

6、编译程序的分类目前基本分为:诊断编译程序,优化编译程序,交叉编译程序,可变目标编译程序。

第2章高级语言及其语法描述1(P36)令文法为N D NDD 0129(1)文法描述的语言L(G)是什么(2)给出句子34,568的最左推导和最右推导。

答:(1)L(G)={为可带前导0的正整数}或L(G)={(0129)+ }或 L(G)={为数字串}(2)最左推导:N ND DD3D34N ND NDD DDD5DD56D568最右推导:N ND N4D434N ND N8ND8N68D685682*.写出一个文法,使其语言是奇数集,且每个奇数是不以0开头。

答:S CAB|B (考虑了正负号)A 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | AA | A0 |B 1|3|5|7|9C +|-|或:(未考虑正负号)S B | ABB 1 | 3 | 5 | 7 | 9A AD | NN 2 | 4 | 6 | 8 | BD 0 | N或:(未考虑正负号)S C | ABCC 1 | 3 | 5 | 7 | 9A 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B BA | B0 |2.(P36, 8)令文法为E T E+T E-TT F T*F T/FF (E)i(1)给出该文法的V N、V T和S。

(2)给出i+i*i,i*(i+i)的最左推导和最右推导。

(3)给出i+i+i,i+i*i的语法树。

答:(1)V N = { E, T, F }V T = { +, -, *, /, (, ), i }S = E(2)最左推导E E+T T+T F+T i+T i+T*F i+F*F i+i*F i+i*iE 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*iE 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 + TE + T iT ii3.(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})为一个非确定有限自动机NFA M,其中定义如下:(x,a)={x,y}(x,b)={y}(y,a)=(y,b)={x,y}试构造其相应的最小化的确定有限自动机DFA M’。

答:由定义可知(x,a),(y,b)均为多值函数,所以是一个非确定有限自动机。

(1)根据函数值,先构造NFA M(2)确定化:①构造DFA M’的转换矩阵:I I a I b{x} ①{x,y} ②{y}③{x,y} ②{x,y} ②{x,y}②{y} ③{x,y} ②②确定DFA M’的初始状态和终态:(a)转换矩阵中I列的第一个状态①为DF A M’的初始状态结点。

(b)含有y状态的子集均为DFA M’的终态结点(②、③为终态结点)。

③根据DFA M’的转换矩阵画出对应的状态转换图:(3)最小化:①首先将其划分成终态集{2,3}和非终态集{1}② {2,3}a={2} {2,3}, {2,3}b={2} {2,3}因此{2,3}已是不可再区分的,所以该DFA M’已是最小化的。

2. (P64,7(1))构造正规式1(01)*101相应的DFA M。

答:(1)构造NFA M。

1(01)*1011 (01)* 1 0 11 1 0 10 11 1 0 11(2)构造转换矩阵(3)由转换矩阵构造DFA M10111111234563.(P64,12(a))将下图所示的NFA M 转换为等价的DFA M ’,并将该DFA ’最小化。

答:该有限自动机状态0输入同一字符a 时到达两个不同的结点,所以是NFA 。

(1)构造转换矩阵I I a I b{0} ①{0,1} ② {1}③{0,1} ② {0,1} ② {1}③{0} ①{1}③(2)由转换矩阵构造DFA Maabab(3)将DFA M最小化①将DFA M的状态划分为非终态集{3}和终态集{1,2}②对每一个子集及每一个a进行考察;{1,2}a = {2} {1,2}{1,2}b = {3} {3}因此{1,2}是不可区分的,所以最终状态为: {1,2},{3}构造最小化的DFA M:a4. (P64,12(b))将下图所示的NFA M转换为等价的DFA M’,并进行最小化。

答:从图上可知该图已经是DFA M,先只需将其最小化。

首先划分为两个集合:{0,1}和{2,3,4,5}{2,3,4,5}a = {1,3,0,5},划分为:{2,4}和{3,5}{2,4}a = {1,0},{2,4}b = {3,5},无需划分{3,5}a = {3,5},{3,5}b = {2,4},无需划分 {0,1}a = {1},{0,1}b = {2,4},无需划分因此,最终的划分为:{0,1}、{2,4}和{3,5},化简后的结果:abb aaa 0,1b2,43,55.(P65,14)构造一个DFA M ,它接受={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。

答:(1)根据题意,得到正规式:(0|10)* (2)构造对应的NFA M :1x12Yεε(3)将NFA M 确定化为DFA M 。

相应的DFA M 的状态转换矩阵如下:I I 0 I 1{X, 1,Y} ① {1; Y} ② {2}③{1, Y } ② {1;Y } ②{2} ③{2} ③ {1; Y} ②DFA M 转换图:011312(4)将DFA M 最小化:① 将DFA M 的状态划分为非终态集{3}和终态集{1, 2}② 对每一个子集进行考察; {1, 2}0 = {2} {1, 2} {1, 2}1 = {3,3} {3} 因此{0, 1}是不可划分的。

因此最终划分结果为:{1, 2}和{3}最小化后的DFA M:第4章语法分析-自上而下1.(P81,1)考虑下面文法GS a^(T)T T,S S(1)消除文法的左递归。

(2)经改写后的文法是否是LL(1)的给出它的预测分析表。

答:(1)消除左递归:S a^(T)T ST’T’ ,ST’|(2)证明改写后的文法是否是LL(1)的。

FIRST(S) = { a, ^, ( } FOLLOW(S) = {,, ), # } FIRST(T) = { a, ^, ( } FOLLOW(T) = { ) }FIRST(T’) = { , , } FOLLOW(T’) = { ) }①证明S a^(T)各侯选式的FIRST是否两两相交。

FIRST(a) FIRST(^)=FIRST(a) FIRST(()=FIRST(^) FIRST(()=②证明T’,ST’的FIRST(T’)和FOLLOW(T’)是否相交。

FIRST(T’) FOLLOW(T’)={,,}{ }= ∴该文法是LL(1)的。

所以,改造后的文法是LL(1)文法③预测分析表:a^(),# S S a S^ S(T)T T ST’T ST’T ST’T’T’T’,ST’2.利用P76表的LL(1)分析表写出表达式 (i+i)*i 的预测分析过程。

步骤符号栈输入串所用的产生式0 #E (i+i)*i#1 #E’T (i+i)*i# E TE’2 #E’T’F (i+i)*i# T FT’3 #E’T’)E((i+i)*i# F(E)4 #E’T’)E i+i)*i#5 #E’T’)E`T i+i)*i# E TE’6 #E’T’)E’T’F i+i)*i# T FT’7 #E’T’)E’T’i i+i)*i# F i8 #E’T’)E’T’ +i)*i#9 #E’T’)E’ +i)*i# T’10 #E’T’)E’T+ +i)*i# E’+TE’11 #E’T’)E’T i)*i#12 #E’T’)E’T’F i)*i# T FT’13 #E’T’)E’T’i i)*i# F i14 #E’T’)E’T’)*i#15 #E’T’)E’)*i# T’16 #E’T’))*i# E’18 #E’T’ *i#19 #E’T’F* *i# T’*FT’20 #E’T’F i#21 #E’T’i i# F i22 #E’T’ #23 #E’ # T’24 # # E’3. (P81,2)对下面的文法GE TE’E’ +ET FT’T’ TF PF’F’ *F’P (E)^a b(1)计算这个文法的每个非终结符的FIRST和FOLLOW。

相关主题