[英]How to convert regular expression to finite state machine?
讓正則表達式;
r = (a*|(ab)*)b*
將此表達式轉換為有限 state 機器的規則是什么?
轉換通用正則表達式的規則可以在文獻中找到(例如 Aho 等人的“編譯器:原理、技術和工具”),但是需要大量的努力來編寫它。 目前,許多開源實現可用於此任務以及有限狀態機和傳感器上的其他操作,例如 openFST、SFST、Foma 和 HFST(這是三者的通用接口)。 它們可作為獨立程序、庫和通過例如 Python 使用。 下面的示例表達式是使用 hfst-xfst 獨立程序編譯的(有關更多信息,請參見http://hfst.github.io/ )。
$ hfst-xfst
hfst[0]: regex [a*|[a b]*]b* ;
? bytes. 6 states, 10 arcs, ? paths
hfst[1]: print net
Sfs0: b -> fs1, a -> fs2.
fs1: b -> fs1.
fs2: b -> fs3, a -> fs4.
fs3: b -> fs1, a -> s5.
fs4: b -> fs1, a -> fs4.
s5: b -> fs3.
hfst[1]:
給定的正則表達式
r = (a*|(ab)*)b*
給定的正則表達式可以分解為多個部分,並且可以再次組合在一起,以便於設計 DFA 讓我們將正則表達式分解為 a*、ab、(ab) 、b 、a+b、a+((ab) ), (a |(ab) )b
現在 a* 可以變成有限自動機a*
現在 ab 可以制作為
b* 可以做成b*
通過將 ab 和 b* 加入一個自動機,我們得到 (ab)* 作為(ab)*
現在 a+b 作為a+b現在 a+b 和 (ab)* 可以通過在 a+b 中放置 (ab)* 代替 b 來組合,然后我們得到 a+((ab) ) a+((ab)*)現在 a+((ab) ) 和 b* 可以使用 ab 方法連接,並產生所需的結果有限 state 自動機。 結果轉換為 (a*|(ab) )b
正則表達式到有限state機器的轉換規則為:
1.將表達式分成幾個部分,使其易於理解並添加它們 2.為這些部分表達式制作Finte state機器。 3.將這些部分表達式一一連接。 4.然后我們得到最終的 NFA。 5.如果我們想得到 DFA,那么通過使用 ε-closure 方法將 NFA 轉換為等效的 DFA。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.