NFA到正则表达式

时间:2014-10-14 05:31:59

标签: regex nfa

我有一张NFA图片,需要从NFA中获取结果正则表达式。我第一次有 b a *,但意识到这不起作用。我认为它必须从(a | b)开始,但我不确定从那里开始。

NFA

1 个答案:

答案 0 :(得分:1)

有关如何将NFA翻译成正则表达式的一般方法,但我不记得如何。但是在你的情况下,我们得到了以下事实的帮助:所有长度大于1的循环都从状态0开始。所以我们可以使用以下正则表达式;

(b?ab|aab|ab+aa?b)*(ba?|aa|ab+aa?)

解释

如果状态0是唯一的匹配状态,则

(b?ab|aab|ab+aa?b)*是正则表达式。由于所有长循环都通过状态0,因此这是我们正则表达式的前缀。

(ba?|aa|ab+aa?)是我们的正则表达式,如果b链接回到状态0(从状态1和状态4)不存在。因为我们在前一个循环之后处于状态0,这将我们带到一个接受状态。

将两者组合在一起,我们有一个正则表达式,它查找返回状态0的跟踪任意次数,然后从状态0移动到接受状态。

(a|b)开始是错误的方法,因为状态1和3几乎没有共同点,如何允许你从a继续进行,这与你允许从b继续进行的方式不同。