簡體   English   中英

如何簡化從DFA生成的正則表達式

[英]how can I simplify a regular expression generated from a DFA

我嘗試使用Java實現Brzozowski代數方法,以生成給定DFA接受的語言的正則表達式。生成的表達式是正確的但不是簡化的。

例如: E|(E)e(e)|(A|(E)e(A))(A|e|(B)e(A))*(B|(B)e(e))|(B|(E)e(B)|(A|(E)e(A))(A|e|(B)e(A))*(E|(B)e(B)))(B|e|(E)e(B)|(A|(E)e(A))(A|e|(B)e(A))*(E|(B)e(B)))*(E|(E)e(e)|(A|(E)e(A))(A|e|(B)e(A))*(B|(B)e(e))) (e = epsilon,E =空集)

而不是: (A|B)*AB

“傳遞閉包方法”返回幾乎相同的結果。

其中一個解決方案包括最小化自動機,但我認為它太重了,無法生成簡化的正則表達式。

另外,使用Java正則表達式方法來簡化正則表達式根本不是很好:)。

所以,嘗試幫助我找到解決方案會很高興。

對的,這是可能的。 看看這篇Peter Norvig的文章 哦! 還有第二部分 解決方案是在python中,但您可以輕松地進行調整。

暫無
暫無

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

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