收藏 分享(赏)

编译原理习题解答参考.doc

上传人:hwpkd79526 文档编号:7085865 上传时间:2019-05-05 格式:DOC 页数:7 大小:108.50KB
下载 相关 举报
编译原理习题解答参考.doc_第1页
第1页 / 共7页
编译原理习题解答参考.doc_第2页
第2页 / 共7页
编译原理习题解答参考.doc_第3页
第3页 / 共7页
编译原理习题解答参考.doc_第4页
第4页 / 共7页
编译原理习题解答参考.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、编译原理习题解答参考1.计算机执行用高级语言编写的程序的途径有哪些?它们之间主要区别是什么?答:计算机执行用高级语言编写的程序途径有两种:解释方式和编译方式。解释方式下直接对源程序进行解释执行,并得到计算结果,特点是计算机并不事先对高级语言进行全盘翻译将其全部变为机器代码,而是每读入一条语句,就用解释器将其翻译为机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如些反复,即边翻译边执行;编译方式下对源程序的执行需要经过翻译阶段和运行阶段才能得到计算结果,其特点是计算机事先对高级语言进行全盘翻译将其全部变为机器代码,再统一执行,即先翻译后执行。简单来说解释方式不生成目标代码,

2、编译方式生成目标代码。2.名字与标识符的区别是什么?答:在程序设计语言中,凡是以字母开头的有限个字母数字的序列都是标识符。当给予一个标识符确切的含义后,该标识符就叫做一个名字。标识符是一个没有意义的字符序列,而名字有确切的含义,一个名字代表一个存储单元,该单存放该名字的值。此外,名字还有属性(如类型和作用域等) 。如 objectint, 作为标识符,它没有任何含义,但作为名字,它可能表示变量名、函数名等。3.许多编译程序在真正编译之前都要进行预处理操作,请问预处理的目的是什么?预处理主要做哪些工作?答:在源程序中有时存在多个连续的空格、回车、换行及注释等编辑性字符,它们不是程序的必要组成部分

3、,它们的意义只是改善程序的易读性和易理解性。为了降低编译程序的处理负担,许多编译程序在编译之前通过预处理工作将这些部分删除。预处理的主要工作是对源程序进行格式方面的规范化处理,如去掉注释、将回车换行变成空格、将多个空格替换为一个空格等。P35 4,6,7,8,9,11(1,2)4答:256,86 (1)答:所产生的语言是:所有正整数集,且可以以 0 打头;0127,34,568 的推导略。7答:SABD|AD|DA2|4|6|8|DB0|A|B0|BAD1|3|5|7|98答:略。9答:文法对于句子 iiieii 存在两棵不同的语法树,所以该文法是二义性文法。11 (1)答:SAB|A SAB

4、AaAb|ab AaAb|abBBc|c BBc|c|(2)答:SAB|BAaA|aBbBc|bc1.化简文法 GS:SBeB Ce|AfA Ae|eC CfD f答:SBeBAfAAe|e2.给出描述语言 L(G)=a2nbn|n1的 2 型文法。答:语言中语句的特点是 a 的个数是 b 的个数的 2 倍,且 a 全部在句子的前部分,b 全部在句子的后部分,2 型文法为:Saab|aaSb3.构造一个文法,使其描述的语言是不能被 5 整除的偶整数集合。S(+|-)AB|BA0|1|2|3|4|5|6|7|8|9|AAB2|4|6|8 如果不以 0 打头,则文法描述如下:S(+|-) (AD|

5、D)AAB|CB0|C|BBC1|2|3|4|5|6|7|8|9D2|4|6|8P64 7(1) ,8(123)127答:1|(0|1)*1011)NFA 如下:X Y53 2 41 Y111 1 002)确定化:I I1 I00 X 1,3,2 1 1,3,2 3,2,4 3,22 3,2,4 3,2,4 3,2,53 3,2 3,2,4 3,24 3,2,5 3,2,4,Y 3,25 3,2,4,Y 3,2,4 3,2,53)DFA 自己画8 (1) (0|1) *01 (2) (0|1| |9) *(0|5) (3)(00|11) *(10|01 )12答:a 图:首先用子集法确定化:I

6、 Ia IbA 0 0,1 1B 0,1 0,1 1C 1 0 用 ABC 表示三个状态,则确定化后的自动机如下所示:ACBBaaab下面用分割法将其最小化:首先得到两个子集:非终态 K1=A,C和终态 K2=B,由于状态 A 和状态 C 输入 a 后分别到达状态 B 和 A,故状态 A 和状态 C 不等价,K1 不能再分割,所以该 DFA 已经是最小化的 DFA 了。(b)答:观察原图已经是 DFA 了,最小化如下:首先得到两个子集:非终态和终态:2,3,4,5 和0,10, 1a=1 0,10,1b=2,42,3,4,5所以0 ,1 是不可分割的因为2 ,3,4,5a=1 ,3, 0,5又

7、因为2,4a=0 ,10,13, 5a=3,5所以该状态集划分为两个状态集2,4 和3,52, 4b=3,53,53, 5b=2,42,4所以状态2,4和3,5 不可分割,最终状态集划分三个状态集:0, 1 2,4 3,5,得到最小化的 DFA 如下:A320aabbbaP81 23、文法 GA如下: 4、已知文法 GS如下:ABaC|CbB S aABbcd|B Ac|c A ASd| C Bb|b B SAh|eC| 消除其左递归 C Sf|Cg| D aBD| 求每一非终结符的 FIRST 合和 FOLLOW 集合,该文法是 LL( 1)文法吗?为什么?2 解答:1) FIRST(E)=

8、(,a,b,FIRST(E)=+, FIRST(T)= (,a,b,FIRST(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,2) 由上知,文法的所有首符集两两不相交。FIRST(E)与 FOLLOW(E )=FIRST(T)与 FOLLOW(T )=FIRST(F )与 FO

9、LLOW(F)=所以,该文法是 LL(1)文法。3)分析表和递归下降分析程序自己完成。3 解答:利用消除左递归的算法,将非终结符排序为:U1=A,U2=B,U3=C ,执行算法得:U1 代入 U2 得:BBaCc|CbBc|c,消除 B 的左递归,BC bBcB|c BBaCc B|U2 代入 U3 得:CCbBcBb|cB|bCc BbC|b CCbBc Bb C|所以,方法消除左递归后的结果为:ABaC|CbBBC bBcB|c BBaCc B|Cc BbC|b CCbBc Bb C|4 解答:首先将文法化简得到如下文法:S aABbcd|A ASd| B SAh|eC| C Sf|Cg|

10、 非终结符的 FIRST 集合如下:FIRST( S)=a, FIRST(A)=a,d, FIRST(B)=a,d,e,h, FIRST(C)=a,f,g, 非终结符的 FOLLOW 集合如下:FOLLOW(S)=#,a,d,h,fFOLLOW(A)=b,a,d,h,eFOLLOW(B)=bFOLLOW(C)=b,g该文法不是 LL(1)文法,因为 FIRST(C Sf)FIRST(C Cg)FIRST(A) FOLLOW(A) 作业:P133 1,3,51解答:E=E+T=E+T*F短语:T*F,E+T*F直接短语:T*F句柄 :T*F3解答:FIRSTVT(S )=a (FIRSTVT(T

11、)=, a (LASTVT(S) =, a (LASTVT(T ) =, a (1)=S(T)有( =)2)T, 则有 LASTVT(T ) ,T), 则有 LASTVT(T) )3) ( ) 后面的答案略。5解答:4、文法 GS如下,是 LR(1)文法但不是 LALR(1)文法,对吗?为什么?(武大)S aAa|aBb|bAb|bBaA cB c解答:识别扩展后文法活前缀的 DFA 如图所示:I0:S.S,#S .aAa,#S.aBb,#S .bAb,#S.bBa,#I1:SS,.#I2:Sa.Aa,#Sa.Bb,#A.c,aB.c,bI3:Sb.Ab,#Sb.Ba,#A.c,bB.c,aI

12、4:SaA.a,#I5:SaB.b,#I6:Ac.,aAc.,bI7:SbA.b,#I8:SbB.a,#I9:Ac.,bAc.,aI10:SaAa.,#I11:SaBb.,#I12:SbAb.,#I13SbBa.,#cABAbSaBcaabb由于不存在移进-归约冲突和归约 -归约冲突,所以文法是 LALR(1)文法。若将同心集 I6 和 I9 合并,则会出现归约归约冲突,所以文法不是 LALR(1)文法。原题说法不正确。5、已知文法 GS如下,请构造该文法的算符优先关系矩阵,并判断是否为算符优先文法?(清华)S iBtS|iBtAeS|aA iBtAeS|aB b解答:求该非终结符的 FIRSTVT 集合和 LASTVT 集合FIRSTVT(S )=i,aFIRSTVT(A)= i,a FIRSTVT(B)=bLASTVT(S )=t,e,aLASTVT(A)=e,aLASTVT(B)=b根据算符优先关系的定义得算符优先关系如下:i=t,t=eitLASTVT(A)e#i t e a b #i e a b # =根据算符优先关系矩阵可知,由于任意两个算符之间不存在多于一种优先关系,所以该文法为算符优先文法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报