编译原理习题及答案(课堂PPT)
- 格式:ppt
- 大小:4.03 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的个数是奇数。