2013-04-22 146 views
0

我有这样的正则表达式正则表达式到NFA [曝光] | [曝光] [曝光] [曝光] | [曝光] [曝光] [曝光] [曝光]

[A-E]|[A-E]{3}|[A-E]{4} 

[A-E]|[A-E] [A-E] [A-E]|[A-E][A-E][A-E] [A-E] 

它承认A,B, ABC, BCD, BCDE, etc.

我想构建NFA,但不知道我是否正确

  1. 我已经这样做了 http://s1.postimg.org/627870q8v/image.png

  2. 或本

http://s10.postimg.org/sqbxf2t5l/image.png

哪一个是正确的?

[A-E] NFA是

http://s17.postimg.org/4b0q1w1mn/image.png

+0

我会说#2更清晰,但他们都看起来是正确的。 – iamnotmaynard 2013-04-22 14:25:13

+0

我关注的是第二个流程, 比方说,用户输入ABCD, 在第一个,我们有A-> B-> C-> d - >最终 但在第二NFA我们如何才能确定哪条路线应该采取,如果A例如首先成功......但是正确的是将两个ABCD都放入[AE] {4}的第三条路线...... – 2013-04-22 14:32:08

回答

1

最小DFA是以下

0 - > 1 - > 2 - > 3 - > 4

与每一个过渡拱由[AE]签署并且最终状态= {1,3,4}

事实上,这个DF A相当于你的NFA。不过我发现第二个更清晰。

+0

另外,我们如何使表达式成为(A)或三角形(ABC)或矩形(ABCD),因此它不能识别双字母的输入,例如“ABC”是可以接受的但是“AAC”不是 这个表达意在描述角度AACB必须作为矩形的名称被拒绝或被分析为A(角度),ACB(三角形)而不是AACB .... – 2013-04-22 14:49:44

+0

在最简单的情况下(ordere d个字母)一个线性自动机就足够了(除了第一个以外所有的最终状态)。 但是,如果你想承认所有的排列组合有点困难。 我不是专家,但也许对于这种情况下更好地定义一个合适的语法。 看看[这里](http://stackoverflow.com/questions/10332894/)的问题的正则表达式的观点。 – 5agado 2013-04-22 15:06:08