编译原理习题解答参考

上传人:m**** 文档编号:499408252 上传时间:2023-08-27 格式:DOC 页数:7 大小:108.51KB
返回 下载 相关 举报
编译原理习题解答参考_第1页
第1页 / 共7页
编译原理习题解答参考_第2页
第2页 / 共7页
编译原理习题解答参考_第3页
第3页 / 共7页
编译原理习题解答参考_第4页
第4页 / 共7页
编译原理习题解答参考_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《编译原理习题解答参考》由会员分享,可在线阅读,更多相关《编译原理习题解答参考(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|D A2|4|6|8|D B0|A|B0|BA D1|3|5|7|98答:略。9答:文法对于句子iiieii存在两棵不同的语法树,所以该文法是二义性文法。11(1)答:SAB|A SAB AaAb

4、|ab AaAb|ab BBc|c BBc|c| (2)答:SAB|B AaA|a BbBc|bc1.化简文法GS: SBe B Ce|Af A Ae|e C Cf D 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|D)AAB|CB0|C|BB

5、C1|2|3|4|5|6|7|8|9D2|4|6|8P64 7(1),8(123)127答:1|(0|1)*1011)NFA如下:XY53241Y1111002)确定化:II1I00 X1,3,21 1,3,23,2,43,22 3,2,43,2,43,2,53 3,23,2,43,24 3,2,53,2,4,Y3,25 3,2,4,Y3,2,43,2,53)DFA自己画8(1)(0|1)*01 (2)(0|1| |9)*(0|5) (3)(00|11)*(10|01)12答:a图:首先用子集法确定化:IIaIbA 00,11B 0,10,11C 10用ABC表示三个状态,则确定化后的自动机如

6、下所示: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=10,10,1b=2,42,3,4,5所以0,1是不可分割的因为2,3,4,5a=1,3,0,5又因为2,4a=0,10,13,5a=3,5所以该状态集划分为两个状态集2,4和3,52,4b=3,53,53,5b=2,42,4所以状态2,4和3,5不可分割,最终状态集

7、划分三个状态集: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)=(,a,b, FIRST(E)=+, FIRST(T)= (,a,b, FIRST(T)= (,a,b, FIRST(F)= (,a,b, FIRST(F)= *, FIRST(P) (,a,b, F

8、OLLOW(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)与FOLLOW(F)= 所以,该文法是LL(1)文法。 3)分析表和递归下降分析程序自己完成。3解答:利用消除左递归的算法,将非终结符排序为:U1=A,U2=B,U3=C,执行算法得:

9、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| 非终结符的FIRST集合如下:FIRST(S)=a, FIRST(A)=a,d, FIRST(B)=a,d,e,h, FIRST(C)=a,f,g, 非终结符的FOLLOW集合如下:FOLL

10、OW(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)=, a (LASTVT(S)=, a (LASTVT(T)=, a (1)=S(T)有(=)2) T, 则有LASTVT(T) , T), 则有LASTVT(T) )3) (T,则有 (FIRSTVT(

11、T) , S, 则有 ,(=,)后面的答案略。5解答:4、文法GS如下,是LR(1)文法但不是LALR(1)文法,对吗?为什么?(武大) S aAa|aBb|bAb|bBa A c B 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,aI4:SaA.a,#I5:SaB.b,#I6:Ac.,aAc.,bI7:SbA.b,#I8:SbB.a,#I9:Ac.,bAc.,aI10:SaAa.,#I11:SaBb.,#I12:SbAb.,#I13

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号