编译原理第三版词法分析:P64-8-3
奇数个0或1,一看好像很难下手。我们从简单的做起,一步一步分析。
首先构造奇数个0,一个0时直接就是正规式:0
然后是3,5,7……个,我们需要每次增加两个0,即(00)*
现在将起组合起来,得到正规式:
0(00)*
这样就保证了一定有奇数个0,现在不考虑1的个数,我们向其中添加n个1,可以放在0的前面,0与中间(00)*,(00)*的两个0中间和(00)*的后面,但是第2个位置和第4个位置可以合并。于是最后的结果就是:
1*0(1* | 01*0)*
有了奇数个0,奇数个1也是一样的原理,最后将他们合起来,结果就是:
1*0(1* | 01*0)* | 0*1(0* | 10*1)*