ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:171.85KB ,
资源ID:9139495      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9139495.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理作业参考答案.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理作业参考答案.docx

1、编译原理作业参考答案第1章 引 言1、解释下列各词源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。目标程序(结果程序)一般可由计算机直接执行。低级语言:机器语言和汇编语言。高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种

2、语言程序(目标语言程序),后者与前者在逻辑上是等价的。其中包括:编译程序,解释程序,汇编程序。编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言),然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。解释程序: 以该语言写的源程序作为输入,但不产生目标程序。按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。2、什么叫“遍”?指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。3、简述编译程序的基本过程的任务。编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5

3、个阶段。词法分析:输入源程序,进行词法分析,输出单词符号。语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。优化:对中间代码进行优化处理。目标代码生成:把中间代码翻译成目标语言程序。4、编译程序与解释程序的区别?编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。5、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗?编译程序的5个阶段中,词法分析,语法分析,语义分析和代码生成生成是必须完成的。而中间代

4、码生成和代码优化并不是必不可少的。优化的目的是为了提高目标程序的质量,没有这一部分工作,仍然能够得到目标代码。6、编译程序的分类 目前基本分为:诊断编译程序,优化编译程序,交叉编译程序,可变目标编译程序。 第2章 高级语言及其语法描述1(P36)令文法为N DNDD 0129 (1)文法描述的语言L(G)是什么?(2)给出句子34,568的最左推导和最右推导。答:(1) L(G)=为可带前导0的正整数或L(G)=(0129)+ 或 L(G)=为数字串(2)最左推导:NNDDD3D34NNDNDDDDD5DD56D568最右推导:NNDN4D434NNDN8ND8N68D685682*写出一个文

5、法,使其语言是奇数集,且每个奇数是不以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 TE+TE-TT F

6、T*FT/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)最左推导EE+TT+TF+Ti+Ti+T*Fi+F*Fi+i*Fi+i*iETT*FF*Fi*Fi*(E)i*(E+T)i*(T+T)i*(F+T)i*(i+T)i*(i+F)i*(i+i)最右推导EE+TE+T*FE+T*iE+F*iE+i*iT+i*iF+i*ii+i*iETT*FT*(E)T*(E+T)T*(E+F)T*(E+i)

7、T*(T+i)T*(F+i)T*(i+i)F*(i+i)i*(i+i) 构造语法树 E 最左推导构造语法树 E + T E + T i T i i3.(P36, 9)证明下面的文法是二义的: S iSeS | iS i答:对于句子iiiei有两棵不同的语法树。因此该文法是二义的。 S iSeS iiSeS iiieS iiiei S 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。答:由定义可

8、知(x,a),(y,b)均为多值函数,所以是一个非确定有限自动机。(1)根据函数值,先构造NFA M(2)确定化: 构造DFA M的转换矩阵:IIaIbx x,y y x,y x,y x,y y x,y 确定DFA M的初始状态和终态:(a)转换矩阵中I列的第一个状态为DFA M的初始状态结点。(b)含有y状态的子集均为DFA M的终态结点(、为终态结点)。 根据DFA M的转换矩阵画出对应的状态转换图:(3)最小化: 首先将其划分成终态集2,3和非终态集1 2,3a=2 2,3, 2,3b=2 2,3因此2,3已是不可再区分的,所以该DFA M已是最小化的。2. (P64,7(1))构造正规

9、式1(01)*101相应的DFA M。答:(1)构造NFA M。 1(01)*101 1 (01)* 1 0 1 1 1 0 1 01 0 1 1 0 1 1 (2)构造转换矩阵II0I1X 1, 2, 3 1, 2, 3 2, 3 2, 3, 4 2, 3 2, 3 2, 3, 4 2, 3, 4 2, 3, 5 2, 3, 4 2, 3, 5 2, 3 2, 3, 4, Y 2, 3, 4, Y 2, 3, 5 2, 3, 4 (3)由转换矩阵构造DFA M3(P64,12(a))将下图所示的NFA M转换为等价的DFA M,并将该DFA最小化。答:该有限自动机状态0输入同一字符a时到达两

10、个不同的结点,所以是NFA。(1)构造转换矩阵IIaIb0 0,1 1 0,1 0,1 1 1 0 (2)由转换矩阵构造DFA M a a b a b(3)将DFA M最小化将DFA M的状态划分为非终态集3和终态集1,2对每一个子集及每一个a进行考察;1,2a = 2 1,21,2b = 3 3因此1,2是不可区分的,所以最终状态为: 1,2,3构造最小化的DFA M: a b a 4. (P64,12(b)将下图所示的NFA M转换为等价的DFA M,并进行最小化。答:从图上可知该图已经是DFA M,先只需将其最小化。首先划分为两个集合:0,1和2,3,4,52,3,4,5a = 1,3,

11、0,5,划分为:2,4和3,52,4a = 1,0,2,4b = 3,5,无需划分3,5a = 3,5,3,5b = 2,4,无需划分0,1a = 1,0,1b = 2,4,无需划分 因此,最终的划分为:0,1、2,4和3,5,化简后的结果:5(P65,14)构造一个DFA M,它接受=0,1上所有满足如下条件的字符串:每个1都有0直接跟在右边。答:(1)根据题意,得到正规式:(0|10)*(2)构造对应的NFA M:(3)将NFA M确定化为DFA M。相应的DFA M的状态转换矩阵如下:II0I1X, 1,Y 1; Y 2 1, Y 1; Y 2 2 1; Y DFA M 转换图: (4)

12、将DFA M最小化: 将DFA M的状态划分为非终态集3和终态集1, 2 对每一个子集进行考察;1, 20 = 2 1, 21, 21 = 3,3 3因此0, 1是不可划分的。因此最终划分结果为:1, 2和3最小化后的DFA M:第4章 语法分析-自上而下1.(P81,1)考虑下面文法GS a(T) TT,SS(1)消除文法的左递归。(2)经改写后的文法是否是LL(1)的?给出它的预测分析表。答:(1) 消除左递归:S a(T)T STT ,ST| (2) 证明改写后的文法是否是LL(1)的。FIRST(S) = a, , ( FOLLOW(S) = ,, ), # FIRST(T) = a,

13、 , ( 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 Sa S S(T) T TST TSTTST T TT,ST 2.利用P76表4.1的LL(1)分析表写出表达式 (i+i)*i 的预测分析过程。 步骤 符

14、号栈 输入串 所用的产生式 0 #E (i+i)*i# 1 #ET (i+i)*i# ETE 2 #ETF (i+i)*i# TFT 3 #ET)E( (i+i)*i# F(E) 4 #ET)E i+i)*i# 5 #ET)ET i+i)*i# ETE 6 #ET)ETF i+i)*i# TFT 7 #ET)ETi i+i)*i# Fi 8 #ET)ET +i)*i# 9 #ET)E +i)*i# T 10 #ET)ET+ +i)*i# E+TE 11 #ET)ET i)*i# 12 #ET)ETF i)*i# TFT 13 #ET)ETi i)*i# Fi 14 #ET)ET )*i# 15

15、 #ET)E )*i# T 16 #ET) )*i# E 18 #ET *i# 19 #ETF* *i# T*FT 20 #ETF i# 21 #ETi i# Fi 22 #ET # 23 #E # T 24 # # E3. (P81,2)对下面的文法GE TE E +E T FTT TF PF F *FP (E)ab(1)计算这个文法的每个非终结符的FIRST和FOLLOW。(2)证明这个文法是LL(1)的。(3)构造它的预测分析表。答:(1)计算每个非终结符的FIRST和FOLLOW。 FIRST(E)=(, a, b, FIRST(E)= +, FIRST(T)=(, a, b, FIR

16、ST(T)=(, a, b, , FIRST(F)=(, a, b, FIRST(F)= * , FIRST(P)=(, a, b, FOLLOW(E)= ) ,# FOLLOW(E)= ), # FOLLOW(T)= +, ), # FOLLOW(T)= +, ), # FOLLOW(F)= +,(, a, b, , ), # FOLLOW(F)= +,(, a, b, , ), # FOLLOW(P)= *,+,(, a, b, , ), # (求解过程:因为E+E,所以FIRST(E)=+, 因为F*F,所以FIRST(F)=*, 因为P(E)ab,所以FIRST(P)=(, , a,

17、b 因为FPF,所以FIRST(F)= FIRST(P)因为TFT,所以FIRST(T)=FIRST(F)因为E TE,所以FIRST(E)= FIRST(T)因为TT,所以FIRST(T)= FIRST(T) =(, , a, b ,求非终结符的FOLLOW:因为E TE的E是文法的开始符号,FOLLOW(E)=#,又因为P(E),所以FOLLOW(E)=#FIRST()=#,)因为E TE,所以FOLLOW(E)=FOLLOW(E)因为E TE,并且E,所以FOLLOW(T)=FIRST(E),又因为E,所以FOLLOW(T)=+ FOLLOW(E)=+ #,=+,#, .因为TFT,所以

18、FOLLOW(T)=FOLLOW(T)=+,#, .因为T FT,并且T,所以FOLLOW(F)=FIRST(T),又因为T,所以FOLLOW(F)=(,a,b FOLLOW(T)=(,a,b +,#, =(,a,b ,+,#, 因为FPF,所以FOLLOW(F)=FOLLOW(F)=(,a,b ,+,#, .因为FPF,并且F,所以FOLLOW(P)=FIRST(F),又因为F,所以FOLLOW(P)=* FOLLOW(F)=*(,a,b,+,),# =*,(,a,b ,+,,# )(2)证明这个文法是LL(1)的该文法没有左递归,只需考察:E +ET TF *F P (E)ab由于:E +

19、E:FIRST(E)=+, FOLLOW(E)=#, =T T: FIRST(T)=(, a, b, , FOLLOW(T)=+, ),# =F * F:FIRST(F)=*, FOLLOW(F)=+,(, a, b,),# =P (E)ab:候选式终结符首字符集两两不相交所以该文法为LL(1)文法。(3)LL(1)分析表+*()ab#E E TEE TEE TEE TEE E+E EETT FTT FTT FTT FTT T TTTTTTTTTTFF PFF PFF PFF PFFFF*FFFFFFFPP(E)PaPbP第5章 语法分析-自上而下分析1(P133,1)令文法G1为:EE+T|

20、T TT*F|F F(E)|i证明E+T*F是它的一个句型,指出这个句型的所有短语,直接短语和句柄。答:因为有:E E+T E+T*F, 所以E+T*F是文法的一个句型。短语:E+T*F, T*F 直接短语:T*F 句柄:T*F2. (P133,3)考虑文法G2S a | (T)T T;S S(1) 计算文法G2每个非终结符的FIRSTVT和LASTVT。(2) 构造文法G2的优先关系表,该文法是算符优先文法吗?(3) 给出输入串(a;(a;a)的算符优先分析过程。解:(1) FIRSTVT和LASTVTFIRSTVT(S) = a, , ( FIRSTVT(T) = ;,a, ,( LAST

21、VT(S) = a, , ) LASTVG(T) = ;,a, , ) (2) 优先关系表a();#a();#是算符优先分析文法,因为优先关系表中没有冲突的关系。(3)(a,(a,a)的分析过程步骤栈余留符号串栈顶关系下一步动作0#(a;(a;a)#.(进栈1#(A;(a;a) #(;用S a归约3#(S;(a;a) #(.;;进栈4#(S;(a;a) #;.(进栈5#(S;(a;a) #(;用S a归约7#(S;(S;a) #(.;;进栈8#(S;(S;a) #;)用S a归约10#(S;(S;S) #; .)用T T;S归约11#(S;(T) #()进栈12#(S;(T)#) .)用S (

22、T)归约13#(S;S)#; .)用T T;S归约14#(T)#()进栈15#(T)#) . #用S (T)归约16#S# #结束3. (P134,5)考虑文法SASb ASAa (1)构造这个文法的LR(0)项目规范族及识别活前缀的DFA。(2)这个文法是SLR(1)的吗?若是,构造出它的SLR分析表。 解:构造拓广文法: (0) SS (1) SAS (2) Sb (3) ASA (4) Aa(1)构造这个文法的LR(0)项目规范族及识别活前缀的DFA。(2)证明文法是否是SLR(1)文法?为了验证这个文法是否是SLR(1)文法,必须对LR(0)项目集规范族的各个项目集I,验证其是否存在“

23、移进归约”、“归约归约”冲突。该项目规范族中的I1,I5,I7存在“移进归约”,只需证明存在集合的a,b,FOLLOW(S),FOLLOW(S),FOLLOW(A)两两不相交。对此求出FOLLOW(S),FOLLOW(S)#,a,b,FOLLOW(A)a,b。验证如下:对状态I1有 FOLLOW(S) = ;Aa;Sb。因此FOLLOW(S) a,b = a,b = ,所以不存在“移进归约”冲突。对状态I5有FOLLOW(A) = a,b;Aa;Sb。 因此FOLLOW(A) a,b = a,b a,b ,所以存在“移进归约”冲突。对状态I7也同样存在这种冲突,即:FOLLOW(S) a,b

24、= ,a,b a,b 因此,该文法不是SLR(1)文法。4(P135 7)证明下面文法是SLR(1)文法,但不是LR(0)文法.SA AAb|bBa BaAc|a|aAb证明:该文法的项目集规范族有: I0 = SA,AAb,AbBa I1 = GO(I0,A) = SA,AAb I2 = GO(I0,b) = AbBa,BaAc,Ba,BaAb I3 = GO(I1,b) = AAb I4 = GO(I2,B) = AbBa I5 = GO(I2,a) = BaAc,Ba,BaAb,AAb,AbBa I6 = GO(I4,a) = AbBa I7 = GO(I5,A) = BaAc,BaAb,AAb I8 = GO(I5,b) = I2 I9 = GO(I7,b) = BaAb,AAb 因为项目集I9中有AAb和BaAb ,存在“归约-归约”冲突,所以不是LR(0)文法。又因为FOLLOW(A) = b,c,# ,FOLLOW(B) = a 使得FOLLOW(A) FOLLOW(B) =,因此构造SLR(1)分析表时不会出现冲突,所以该文法是SLR(1)的。5有文法:0S E1E aA 2E bB 3A cA 4A d5B cB 6B d根据下列给出的该文法的LR(0)分析表,写出分析符号串“ac

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1