2013-04-22 187 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