编译原理习题及答案1~3(课堂PPT)
- 格式:ppt
- 大小:4.61 MB
- 文档页数:274
1.1.叙述正规式(00 | 11)*( (01 | 10) (00 | 11)* (01 | 10) (00 | 11)* )*描述的语言。
答案:该正规式所描述的语言是,所有由偶数个0和偶数个1构成的串。
另外,和该正规式等价的正规式有( 00 | 11 | ( (01 | 10) (00 | 11)* (01 | 10) ) )*。
备注:一、如果题目要求转化为NFA,则方法1:按照课本P54-55(或课件compiler –03)的方法转化。
方法2:见题目1.5的方法。
二、如果题目要求转化为DFA,则方法1:先将正规式转化为NFA,再按照课本P49-51(或课件compiler –03)的方法转化。
方法2:如果掌握的非常熟练,而且正规式比较简单,则可参照题目1.6的方法直接转化。
三、如果题目要求化简DFA,或得到最简DFA,则在得到DFA后,按照课本P56-57(或课件compiler-03)的方法化简。
1.2 给出下面的正规表达式:(1)能被五整除的十进制整数(2)包含奇数个1或奇数个0的二进制数串(3)包含偶数个0和奇数个1的二进制数串答案:(1) 以0|5结尾的十进制数→长度为1的十进制数或长度大于1的十进制数→长度为1的正规式为(0|5)→长度大于1的正规式为(1|2|3|4|5|6|7|8|9) (0|1|2|3|4|5|6|7|8|9)* (0|5)→正规式为:(0|5) | (1|2|3|4|5|6|7|8|9) (0|1|2|3|4|5|6|7|8|9)*(0|5)(2) 包含奇数个1或奇数个0的二进制串→包含奇数个1 或包含奇数个0→思考ing:(偶数个1)* 一定是偶数个1构成的串,但是(奇数个1)* 一定是奇数个1构成的串吗?答案是否定的→那么为了得到奇数个1组成的串怎么办?→1(偶数个1)* 肯定是奇数个1组成的串→为了得到奇数个1的二进制串,还需要补上0→得到正规式0*10*(10*10*)*→同理,可以得到奇个数0的二进制串,1*01*(01*01*)→正规式为0*10*(10*10*)* | 1*01*(01*01*)→与之等价的正规式为0*1(0|10*1)*|1*0(1|01*0)*(3) 包含偶数个0和奇数个1的二进制数串→由1.1可知,偶数个1和偶数个0的正规式为(00 | 11)*( (01 | 10) (00 | 11)* (01 | 10) (00 | 11)* )*,先给该正规式起个名字,even_0_even_1→ (00 | 11)*( (01 | 10) (00 | 11)* (01 | 10) (00 | 11)* )*→在此基础上,我们只需将even_0_even_1与奇数个1和偶数个0构成的串连接即可→对于二进制串,起始字符为1或0→如果是1,那么剩下的部分一定是偶数个0和偶数个1,即得到1 even_0_even_1→如果是0,那么经过若干个00或11,一定会出现一个01或10,才能保证0的个数是偶数,1的个数是奇数。
(完整版)编译原理课后习题答案第一章1.典型的编译程序在逻辑功能上由哪几部分组成?答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。
2. 实现编译程序的主要方法有哪些?答:主要有:转换法、移植法、自展法、自动生成法。
3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式?答:编译法、解释法。
4. 编译方式和解释方式的根本区别是什么?答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快;解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。
第二章1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关系如何?答: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?7 5431N?ND?NDD?NDDD?NDDDD?DDDDD?7DDDD?75DDD?754 DD?7543D?75431 4. 证明文法S→iSeS|iS| i是二义性文法。
答:对于句型iiSeS存在两个不同的最左推导:S?iSeS?iiSesS?iS?iiSeS所以该文法是二义性文法。