将RE转换为NFA

时间:2012-06-05 03:15:29

标签: nfa

哪一个是显示RE联盟0 + 1的正确方法?我看到了这两种方式,但我认为两者都是正确的。如果两者都正确,为什么要复杂化?

enter image description here

2 个答案:

答案 0 :(得分:2)

正如你所说,它们都是正确的。

第一个看起来像是使用一组标准规则生成的 - 在这种情况下,它是过度杀戮(而且看起来很傻),但在更复杂的情况下,遵循简单的规则比容纳整个事情更容易你的头脑,从头开始写一个等价的NFA。

通常,可以重写NFA,使其具有单个最终状态(显然已经只有一个开始状态)。

然后,这种形式的两个NFA可以这样组合,即他们在组合时接受的语言是他们单独接受的语言的联合 - 这对应于常规的或(+)表达。要以这种方式组合NFA,只需创建一个新节点作为起始状态,并将其与ε-转换连接到两个NFA的起始状态。

然后,为了在单个最终状态中整齐地结束NFA(以便我们可以根据需要递归地使用此NFA用于其他联合),我们创建一个额外的节点作为统一的最终状态和ε-connect旧的最终状态(失去最终状态)到它。

使用上面的一般规则,很容易得出第一个图表(两个NFA联合在一起,第一个匹配0,另一个1) - 第二个很容易通过常识,因为它是如此简单的正则表达式; - )

答案 1 :(得分:0)

第一个构造属于具有电子移动的NFA类,它是一般NFA类的扩展。电子移动使您能够在不需要输入的情况下进行转换。对于转换函数,重要的是仅使用e-transitions计算从给定状态可到达的状态集。显然,添加电子移动不允许NFA接受非常规语言,因此它最终等同于NFA,然后是DFA。

Thompson的构造算法使用带有电子移动的NFA从任何正则表达式构建自动机。它提供了一种从正则表达式构造自动机的标准方法,当它方便自动化构造时。

相关问题