1. 程式人生 > >簡單的NFA轉DFA的程式碼實現

簡單的NFA轉DFA的程式碼實現

(本文章是學習筆記,裡面可能有錯誤,隨時更新中。。。)

該方法雖然是一個通用的方法,但是隻是針對(a|b)*abb實現而已。也就是說,如果要支援所有的NFA,那麼就需要修改一下NFA的讀入。

(a|b)*abb的狀態轉換表是:


將NFA轉為DFA的演算法如下:

1、對初始狀態進行閉包操作,也就是sinma-closure(0),0為初始狀態,將所得的狀態集合設為T,並將其加入D中,設為未標記。

2、檢查D中是否有未標記的集合T,如果有的話,就拷貝一份到T,同時在D中將T設定為已標記

3、對T到A進行轉移(move(T,a)),合併起來的狀態集為U,判斷U是否在D中,沒有的話就加入D中,同時設定為未標記。

4、U則是當前T到a的狀態集,需要記錄下來。

5、迴圈第二個步驟,直到所有的標記都已經讀取完畢。

詳細程式碼見:https://github.com/CODE7070/lexer