簡體   English   中英

從有限自動機構造正則表達式

[英]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表示空字符串。 然后,這只是語法轉換的問題。

圖形:

VCSN圖形呈現

請參見本示例live ,並使用它作為玩具。

從q2到最終狀態是不可能的。 刪除它,生成的DFA應該更容易轉換。

據我所知,字符串必須是“b *”以“a *”結尾或以“a + bb +”結尾我現在擁有的是((b *(a +(bb)) )但是這不是以“a”結尾的字符串。

想象q3不是最終狀態,而q4是初始狀態。 那么正則表達式會是什么樣? 將其更改為您想要的內容應該不會太困難,只是不要害怕讓正則表達式的多個部分描述相同的狀態和/或轉換。

還有一個提示:我很確定你還需要使用它們? 或者| 至少一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM