查找以下自动机接受的语言的正则表达式

时间:2019-06-03 16:41:29

标签: regex automata dfa minimization

找到以下自动机接受的语言的正则表达式。

  1. 消除q1

    q0: ab
    q2: ba*
    q0 to q2: b+aa
    q2 to q0 : bb
    
  2. 消除q2

    q0: ab+b+aa(ba)*
    

automaton diagram

(不确定我的方法是否正确)

1 个答案:

答案 0 :(得分:1)

有两个规则:

  1. 如果X -> sY -> rXt,则可以用Y -> rst替换后者。
  2. 如果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闭包中。尝试几个词可以表明我们已经找到了一个很好的表达方式。