自动机到正则表达式

时间:2018-12-15 20:47:27

标签: regular-language automata finite-automata automata-theory

我有这个简单的自动机:

enter image description here

然后我写我的系统:

L0 = aL0 + bL1

L1 = bL0 + aL1 + Ɛ

使用Arden定理,我可以简化表达式:

L0 = a*bL1

L1 = bL0 + aL1 + Ɛ

然后:

L1 = b(a*bL1) + aL1 + Ɛ

L1 = b(a*b+a)L1 + Ɛ

L1 = b(a*b+a)*

这似乎是不正确的,但我不明白为什么,有人可以向我解释我错了吗?

1 个答案:

答案 0 :(得分:2)

您的问题是L0和L1代表通向L0和L1的字符串的语言,而不是从L0和L1引向接受状态的字符串的语言。因此,空字符串不等于接受状态L1,而是初始状态L0。因此,

L0 = aL0 + bL1 + Ɛ
L1 = bL0 + aL1

然后

L0 = a*(bL1 + Ɛ)
L1 = bL0 + aL1

下一步

L0 = a*(bL1 + Ɛ)
L1 = ba*(bL1 + Ɛ) + aL1
   = ba*bL1 + ba* + aL1
   = (ba*b + a)L1 + ba*
   = (ba*b + a)*ba*

这个正则表达式似乎是正确的。