2013-05-06 17:54:15| 分類(lèi): 編譯器 | 標簽:nfa dfa 最簡(jiǎn)dfa |字號 訂閱
正則表達式-->NFA--->DFA--->最簡(jiǎn)DFA
DFA(有限自動(dòng)機,每個(gè)狀態(tài)的下一步都是確定的,沒(méi)有空。只有一個(gè)開(kāi)始狀態(tài),只有一個(gè)結束狀態(tài))
NFA(有可能轉到多個(gè)狀態(tài),可能有空)
※由正則表達式轉到NFA:
基本可以分成3種:
AB(連接)
A|B(或)
A*(0到多個(gè)A)

例:正則表達式(a|b)*(aa|bb)(a|b)*的NFA

NFA和DFA匹配串的時(shí)間空間復雜度

※NFA的確定化:NFA轉DFA
空閉包,子集法
原理:有些狀態(tài)是在做同樣的工作,他們的工作完全可以用一個(gè)狀態(tài)來(lái)做,把這些相同功能的狀態(tài)組合成一個(gè)集合,并把它重新命名為一個(gè)狀態(tài)。
例:
將以下NFA轉換為DFA

按下表不斷構建,直到Ia,Ib中出現的集合,全部都出現在I中。并且將他們重新編號
(終態(tài)是那些有Y的集合,Y為原先NFA的終態(tài))

轉成DFA的結果:

※DFA化簡(jiǎn)成最簡(jiǎn)DFA:
1.劃分終態(tài),非終態(tài): P={{4,5,6,7},{1,2,3}}
2.{4,5,6,7}內部能識別a和b,不再劃分,(成一個(gè)大的部門(mén)處理相同的事情)
3.{1,2,3} 根據識別a的能力,劃分為{1,3}和{2}(1,3識別a都轉到3)
根據識別b的能力,劃分為{1} {3} {2}
4.(此例不用考慮這條)刪除死循環(huán)(即一個(gè)對所有輸入符號都有到自身轉換的非終態(tài))和不可達狀態(tài)
結果P={{4,5,6,7},{1},{2},{3}}
給四個(gè)劃分再重新命名 變成1,2,3,4
結果是:

聯(lián)系客服