編譯原理 DFA的化簡

2021-10-09 23:24:30 字數 1601 閱讀 6727

任何正規語言都有乙個唯一的狀態數目最少的dfa

dfa m的化簡是指:尋找乙個狀態數比m少的dfa m』,使得l(m)=l(m』)

有窮自動機的多餘狀態:從自動機的開始狀態出發,任何可識別的輸入串也不能到達的狀態

化簡了的dfa m』 滿足兩個條件:

沒有多餘狀態 ;

沒有兩個狀態是等價的。

① 將dfa m的狀態集q分劃成兩個子集:終態集和非終態集;

② 對每個子集g,如果面對某個輸入符號得到的後繼狀態不屬於同乙個子集,則將g進一步劃分;

③ 重複②直到不再產生新劃分;

④ 在每個子集中選乙個狀態作代表,消去其他狀態,得到最少狀態的等價dfa m』。

將下圖的 dfa 最小化

解:根據規則 ① ,將dfa m的狀態集q分劃成兩個子集

∏ =(,)

根據規則 ② ,因為 a = ⊆ _a=⊆a​

=⊆, 而 b = ⊄ _b=⊄b​

=⊄。因為 b ⊆ _b⊆b​

⊆, b ⊆ _b⊆b​

⊆,故將 劃分為 和

∏ =(,,)

根據規則 ② ,因為 a = ⊆ _a=⊆a​

=⊆, 而 b = ⊄ ⊄ _b=⊄⊄b​

=⊄⊄。因為 b ⊆ _b⊆b​

⊆, b ⊆ _b⊆b​

⊆,故將 劃分為 和

∏ =(,,,)

根據規則 ② ,因為 a = ⊆ ⊄ ⊄ _a=⊆⊄⊄a​

=⊆⊄⊄, 而 b ⊆ ⊆ _b⊆⊆b​

⊆⊆。對子集 ,輸入後得到的後繼狀態屬於同乙個子集 ,故不再進行劃分

∏ =(,,,)

根據規則 ③ ,選擇 a aa 作為 的代表,將狀態 c cc 從狀態轉換圖刪去,並將原來引向 c cc 的弧都引至 a aa,這樣得到化簡後的 dfa m』

將下圖的 dfa 最小化

解:根據規則 ① ,將dfa m的狀態集q分劃成兩個子集

∏ =(,)

根據規則 ② ,因為 l = ⊆ _l=⊆l​

=⊆, 而 d ⊆ ⊆ _d⊆⊆d​

⊆⊆。對子集 ,輸入後得到的後繼狀態屬於同乙個子集 ,故不再進行劃分

∏ =(,)

根據規則 ③ ,選擇 1 11 作為 的代表,將狀態 2 22 從狀態轉換圖刪去,並將原來引向 2 22 的弧都引至 1 11,這樣得到化簡後的 dfa m』

編譯原理 NFA構造DFA

本題摘自北郵的編譯原理與技術。首先,根據此圖構造狀態轉換表 表中第一列第一行表示從第乙個符號b通過任意個空轉換能到達的節點,ia表示由此行的狀態陣列 可以看作0狀態 經過乙個a可以到達的節點,同理,ib表示由狀態陣列經過乙個b可以到達的節點。當然,有些人可能覺得和看作兩個狀態不合理,他們之間不是有交...

編譯原理 DFA的程式設計實現

編寫乙個c語言程式,模擬實現dfa識別字串的過程。dfa的輸入 dfa的儲存與讀寫 dfa的正確性檢查 dfa的語言集列表顯示 dfa的規則字串判定 dfa的輸入 分別輸入dfa的 字符集 狀態集 開始狀態 接受狀態集 狀態轉換表 等內容,並儲存在設定的變數中。dfa的儲存與讀寫 將上述dfa的五元...

編譯原理 NFA轉換到DFA

學習分享 超詳細解析nfa轉換到dfa 例nfa 1.第一步畫出類似下面的 iia ib2.填寫 i iaib 第一行中i表示從s開始經過任意個 到達的狀態的集合。每行中的ia,ib表示從該行i集合中各個狀態開始經過乙個a b 以及後面有任意個 必須出現在a b 後 到達的狀態的集合。其餘行中的i表...