1. 程式人生 > >編譯原理-NFA構造DFA

編譯原理-NFA構造DFA

img 關系 cat 輸入a mage 重復 邏輯 image ati

本題摘自北郵的編譯原理與技術。

技術分享圖片

首先,根據此圖構造狀態轉換表

技術分享圖片

表中第一列第一行表示從第一個符號B通過任意個空轉換能到達的節點,Ia表示由此行的狀態數組({B,5,1}可以看作0狀態)經過一個a可以到達的節點,同理,Ib表示由狀態數組經過一個b可以到達的節點。

當然,有些人可能覺得{B,5,1}和{5,1,3}看作兩個狀態不合理,他們之間不是有交集嘛,實際上他們之間並無交集,因為輸入a後,{B,5,1}能到達的新節點是3,之所以要寫成{5,1,3},可能是要兼顧邏輯吧>_>

再仔細觀察第一行,既然第一列可以看作一個狀態,那麽第二列就可以看作首狀態輸入一個a到達的另一個狀態,所以可以把剩下兩個{5,1,3}和{5,1,4}放入二三行的第一列作為狀態1和狀態2,簡而言之,就是幾個不同狀態之間通過輸入a,b來達到另一個狀態。(不知道我用自己的理解來講有沒有講清楚。。。)重復的狀態數組自然是略過,畢竟這個表格是為了窮舉所有狀態之間關系,因此第四行第一個是{5,1,3,2,6,E}。

因此,根據此狀態轉換表,可以進一步得到下表

技術分享圖片

由於E是終結狀態,因此,包含E的狀態都是終結狀態,3,4,5,6均為終結狀態。

接下來畫狀態轉換圖就不必多說了吧。

技術分享圖片

請無視我模糊到變形的圖片,能看清楚就好

參考文章:NFA轉變為DFA

編譯原理-NFA構造DFA