[英]Constructing a Regular Expression from a Finite Automata
我試圖從有限自動機構造一個正則表達式,但發現自己完全陷入了困境。 使用的正則表達式是這樣的:
? = 0或1
* = 0或更多
+ = 1或更多
| =或
_ =空字符串
@ =空集
()=括號
據我了解,字符串必須以“ b *”結尾,以“ a *”結尾或以“ a + bb +”結尾
我現在擁有的是((b*(a+(bb))*)*)
但這沒有考慮以'a'結尾的字符串。
如前所述,我100%堅持使用此功能,只是無法理解應該如何使用此功能。
圖片: http : //img593.imageshack.us/img593/2563/28438387.jpg
碼:
自動機的類型
F A
狀態
Q1
Q2
Q3
Q4
字母
一種
b
初始狀態
Q3
最終狀態
Q3
Q4
轉變
q1一q2
q1 b q3
q2一q2
q2 b q2
第3季度
第3季
第4季度
第4季度
任何解決方案或提示贊賞!
如果將其提供給自動機工具(例如Vcsn ),則會得到以下信息:
In [1]: import vcsn
In [2]: %%automaton a
...: $ -> q3
...: q1 -> q2 a
...: q1 -> q3 b
...: q2 -> q2 a
...: q2 -> q2 b
...: q3 -> q4 a
...: q3 -> q3 b
...: q4 -> q4 a
...: q4 -> q1 b
...: q3 -> $
...: q4 -> $
...:
mutable_automaton<letterset<char_letters(ab)>, b>
In [3]: a.expression()
Out[3]: (b+aa*bb)*(\e+aa*)
其中\\e
表示空字符串。 然后,這只是語法轉換的問題。
圖形:
請參見本示例live ,並使用它作為玩具。
從q2到最終狀態是不可能的。 刪除它,生成的DFA應該更容易轉換。
據我所知,字符串必須是“b *”以“a *”結尾或以“a + bb +”結尾我現在擁有的是((b *(a +(bb)) ) )但是這不是以“a”結尾的字符串。
想象q3不是最終狀態,而q4是初始狀態。 那么正則表達式會是什么樣? 將其更改為您想要的內容應該不會太困難,只是不要害怕讓正則表達式的多個部分描述相同的狀態和/或轉換。
還有一個提示:我很確定你還需要使用它們?
或者|
至少一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.