找到以下自动机接受的语言的正则表达式。
消除q1
q0: ab
q2: ba*
q0 to q2: b+aa
q2 to q0 : bb
消除q2
q0: ab+b+aa(ba)*
(不确定我的方法是否正确)
答案 0 :(得分:1)
有两个规则:
X -> s
和Y -> rXt
,则可以用Y -> rst
替换后者。X -> sX | r
,则可以将其替换为X -> s*r
。此DFA的常规语法如下:
(q0) -> b(q2) | a(q1) | (q3)
(q1) -> b(q0) | a(q2)
(q2) -> b(q1)
(q3) -> lambda
我们可以开始消除状态。 (q3)很容易摆脱:
(q0) -> b(q2) | a(q1) | lambda
(q1) -> b(q0) | a(q2)
(q2) -> b(q1)
我们可以轻松摆脱(q2):
(q0) -> bb(q1) | a(q1) | lambda
(q1) -> b(q0) | ab(q1)
我们需要在(q1)的制作中摆脱自我引用:
(q0) -> (bb+a)(q1) | lambda
(q1) -> (ab)*b(q0)
现在,我们可以摆脱(q1):
(q0) -> (bb+a)(ab)*b(q0) | lambda
现在,让我们摆脱自我参照:
(q0) -> ((bb+a)(ab)*b)*
因此,正则表达式((bb+a)(ab)*b)*
应该起作用。这使我们回到状态(q0),而接受状态(q3)处于(q0)的lambda闭包中。尝试几个词可以表明我们已经找到了一个很好的表达方式。