任务:根据给定的正则表达式构建NFA。
我决定将一些旧程序推送到GitHub。特别是关于形式语言理论的问题。测试代码后,我得到了这个结果,我无法真正分辨出这是一个错误还是正确的输出。看起来有点不错,但汤普森算法无法输出。这些小循环看起来也很可疑。他们基本上什么也不做。
答案 0 :(得分:1)
绝对错误。
在我看来,epsilon-self-loops像是对联合运算符的处理中的错误。从联合中的每个最终状态到新的最终状态应该有一个epsilon过渡,所以我猜测您混合了epsilon链接。我不确定在一种情况下您如何在a
上获得正确的epsilon转换,而在另一种情况下如何获得b
上的正确epsilon转换,因此该错误可能更复杂。
您是对的,在这种情况下,ε自环没有任何危害。但是,很有可能从联结腿的末端到联结的结束状态缺少epsilon链接会导致(a*|b)
或(a|b*)
出现问题。实际上,其中之一可能会识别出(a|b)+
。
此外,您的Kleene star实施不允许零重复。您拥有的是(a|b)+
,而不是(a|b)*
,因为从起始状态到星形子构造的状态没有ε过渡。
答案 1 :(得分:0)