簡體   English   中英

生成具有死態或多余狀態的DFA的正則表達式

[英]Regular expression that generates a DFA with dead or superfluous states

我正在尋找在我的詞法分析器中實現DFA最小化器的方法,但似乎無法生成看起來好像已經是表達式的最小DFA的DFA。

我正在從NFA構造DFA,而NFA是使用后綴正則表達式的thomson構造構建的。 這幾乎與龍書中所描述的完全一樣。 為了制作詞法分析器,使用從開始狀態開始的epsilon轉換將幾個NFA組合在一起。 DFA算法就是在此組合NFA上應用的。

那么,是否有任何“已知”正則表達式會生成DFA,從而為消除死角和最小化狀態提供一個很好的測試平台?

當然,我可以破解一個奇怪的DFA並在上面應用算法,但這不是一個合適的測試用例嗎? 如果這樣的話,我構建DFA的方法就不容易出現死態,那么該信息將同樣有價值,因為從那時起,我可以完全跳過實施狀態消除功能。

編輯:如果您需要實現細節才能准確回答,則代碼可在github上找到 ,尤其是NFA.csDFA.cs類。 此外,如果有幫助,我還會在博客文章中撰寫有關正在使用的構造算法的系列文章

好的,所以我以完全繞行的方式發現了這一點。 因為從解析器中獲得了不錯的調試輸出,所以我制作了可視化正則表達式的工具。 這恰如其分地說明了這樣一種表達方式,即使用標准的湯普森構造技術將為您提供一個非常愚蠢的自動機: (a+b+c+)+|abc

工具中顯示的地址: http ://regexvisualizer.apphb.com/?Regex=%28a%2Bb%2Bc%2B%29%2B%7Cabc&NfaSize=300&DfaSize= 250#

該工具目前沒有任何優化即可直接進行湯普森構造。 如果除去完全多余的表達式的|abc部分,則該表達式應保持不變。 沒有。

暫無
暫無

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

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