簡體   English   中英

我對么? (有限自動機)

[英]Am I correct? (Finite Automata)

我被賦予了正則表達式,我想將其轉換為NFA然后轉換為DFA。 這是正則表達式:

a(b | c)* a | aac * b

然后我使用Thomson的算法將其轉換為NFA: NFA

這是DFA: DFA

有人可以快速看看,如果我錯了或者對,請告訴我?

由於這很可能是家庭作業,我很猶豫,只是給你完整正確的解決方案。

您的NFA看起來是正確的,但有許多多余的狀態,這些狀態不是必需的,但不會對其正確性產生負面影響。 (乍一看,你可以刪除11個州。)

但是,您的DFA不正確。 這是因為當您分支開始處理字符串或其他條件的一個條件時,您稍后將它們一起重新加入。 這允許它從與a(b|c)*a匹配的接受字符串中獲取路徑,並通過前往節點15,1711來獲取另一個bc 然后它接受此字符串,即使它與您的表達式不匹配。

你需要做的是基本上阻止這種情況發生。 如果您有其他問題,請隨時提出。

我強烈建議您制作一個您應該知道並且不應該被接受的測試字符串列表,然后跟蹤它們,確保您的自動機以正確(接受或拒絕)狀態結束。

暫無
暫無

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

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