NFA 與 DFA 的轉換

來源:互聯網
上載者:User

標籤:style   os   ar   for   代碼   sp   on   size   c   

聲明

     本文是對編譯原理中NFA到DFA的轉換做的總結,該代碼參考了編譯原理中詞法分析的相關內容.

轉換方式

      NFA即不確定有窮狀態機器,而DFA是確定有窮狀態機器。

        從本質上講NFA與利用其構造而成的DFA是等價的,但因為NFA某一狀態離開的路徑可能有多條,因此常常在構造出NFA後將前面的狀態集合做一抽象以構建對於每一狀態離開路徑只有一條的DFA。

        NFA到DFA的構造方法常用到兩點,即子集構造法與閉包傳遞.

虛擬碼說明
1.0-closure(s) 能夠從NFA的狀態S開始只通過0轉換到達的NFA的狀態集合2.0-closure(T) 能夠從T中的某個NFA狀態s開始只通過0轉換到達的NFA的狀態集合3.move(T,a)    能夠從T中某個狀態s觸發只通過標號為a的轉換轉換達到的NFA狀態集合/**子集構造法*/NFA-DFA-CONVERT(nfa, dfa)s0 -> nfa的開始狀態U  -> 0-closure(s0) push U into dfa without markwhile ( T -> find one in dfa without mark){mark T;for(every possible intput a)U‘ -> 0-closure(move(T, a))if(U‘ is not in dfa)push U‘ into dfa without markset dfa[T, a]->U‘}/**計算0-closure(T)的閉包傳遞*/CLOSURE(T)push all status in T  into stack Spush all status in T  into Uwhile(S is not empty){t->pop one from S;for(每個從t狀態能通過空串轉換得到的狀態U‘)if(U‘不在U中){push U‘ into U;push U‘ into S;}}return U;

 總結 
            dfa的每個狀態是對nfa狀態集合的二次抽象.以此達到每個狀態只有一條離開路徑.

NFA 與 DFA 的轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.