形式语言:含偶数个零和奇数个一的正则表达式
第一部分先看偶数个零偶数个一的正则表达式:
首先应该明确一下问题
我们的问题等价于“偶数个0偶数个1的正规式是什么”,而不是“(00|11 | ( (01|10) (00|11) * (01| 10))) *就能表示偶数个0偶数个1 的正规式”。
可以想一下,在二进制串中0和1的个数的状态无非以下四种:
偶数个0,偶数个1 -------------0
偶数个0,奇数个1 -------------①
奇数个0,偶数个1 -------------②
奇数个0,奇数个1 -------------③
接下来我们画一下状态转换图:
进而可以表示为:(00|11 | (01|10) (00|11) * (01| 10))*
第二部分看偶数个零奇数个一的正则表达式:
这是陈意云老师习题集上的答案 :
even_0_even_1→(00|11)((01|10)(00|11)(01|10)(00|11))
even_0_odd_1→1even_0_even_1|0(00|11)(01|10)even_0_even_1
对于偶数个0和奇数个1构成的串,其第一个字符可能是0或1。
(1)如果是1,那么剩下的部分一定是偶数个0和偶数个1
(2)如果是0,那么经过若干个00或11,一定会出现一个01或10,才能保证0的个数是偶数,1的个数是奇数。若串还没有结束,剩余部分一定是偶数个0和偶数个1。
这样,正确的正规定义是:
even_0_odd_1→1even_0_even_1|0(00|11)(01|10)even_0_even_1
参考:(1)https://blog.****.net/qq_42689684/article/details/82763075 作者:夏天的鼻涕怪
(2)陈意云 编译原理课后答案