预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共41页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第一章1.典型的编译程序在逻辑功能上由哪几部分组成?答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。2.实现编译程序的主要方法有哪些?答:主要有:转换法、移植法、自展法、自动生成法。3.将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式?答:编译法、解释法。4.编译方式和解释方式的根本区别是什么?答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快;解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。第二章乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关系如何?答:1)0型文法、1型文法、2型文法、3型文法。2)2.写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。答:ZSME|BS1|2|3|4|5|6|7|8|9M|D|MDD0|SB2|4|6|8E0|B3.设文法G为:ND|NDD0|1|2|3|4|5|6|7|8|9请给出句子123、301和75431的最右推导和最左推导。答:NNDN3ND3N23D23123NNDNDDDDD1DD12D123NNDN1ND1N01D01301NNDNDDDDD3DD30D301NNDN1ND1N31ND31N431ND431N5431D543175431NNDNDDNDDDNDDDDDDDDD7DDDD75DDD754DD7543D754314.证明文法SiSeS|iS|i是二义性文法。答:对于句型iiSeS存在两个不同的最左推导:SiSeSiiSesSiSiiSeS所以该文法是二义性文法。5.给出描述下面语言的上下文无关文法。(1)L1={anbnci|n>=1,i>=0}(2)L2={aibj|j>=i>=1}(3)L3={anbmcmdn|m,n>=0}答:SABAaAb|abBcB|SASb|abAa|SaSd|A|AbAc|6.设计一个最简的DFAM,使其能够识别所有的被3整除的无符号十进制整数。答:7.设计一个DFA,使其能够接受被4整除的二进制数。答:8.写出表达下列各项的正则表达式。(1)二进制数且为5的倍数。(2)Σ={a,b,c},第一个a位于第一个b之前的字符串。(3)Σ={a,b,c},包含偶数个a的字符串。(4)Σ={0,1},不包含11子串的字符串。答:(1)可以先画出相应的有限自动机:添加新的开始状态S和终止状态T:根据以上自动机,列出以下方程:①S=A②A=0A+1B+T③B=0C+1D④C=0E+1A⑤D=0B+1C⑥E=0D+1E解以上方程组:⑥E=1*0D②A=0*1B+0*T⑥代入④C=01*0D+1A⑤代入④C=01*00B+01*01C+1AC=xB+yA其中x=(01*01)*01*00y=(01*01)*1⑤代入③B=0C+10B+11CB=(0|11)C+10BB=(10)*(0|11)C将C=xB+yA代入上式B=uB+vAB=u*vA其中u=(10)*(0|11)xv=(10)*(0|11)y将B=u*vA代入②A=0*1u*vA+0*TA=(0*1u*v)*0*T将A代入①S=(0*1u*v)*0*T串(0*1u*v)*0*即为所求。(2)该题目理解为:至少有一个a和一个b,且a出现在b的前面(可以有间隔),则答案为:c*a(a|c)*b(a|b|c)*(3)((b|c)*a(b|c)*a)*(b|c)*(a(b|c)*a|b|c)*(4)(0|10)*(1|)第三章1.词法分析器的功能是什么?答:读源程序的字符序列,逐个拼出单词,并构造相应的内部表示TOKEN;同时检查源程序中的词法错误。试分析分隔符(空格、跳格及回车等)对词法分析的影响。答:空格、跳格、回车等分隔符号对词法分析不起作用,可以删除。但是回车符号可以用于错误定位,所以在删除回车符号前需要统计回车的个数。给出识别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);}……第四章1.设有如下文法G[S]:SaABbcd|AASd|BSAh|