相關資料來源:慕課哈工大編譯原理課程
定義:根據目前所處的狀態和輸入信息來決定後繼行爲的數學模型(類似電梯)
用M表示有窮自動機,某個串可以從初始狀態到達最終狀態則說該串被FA接收
由一個有窮自動機M接收的所有串構成的集合稱爲是
該FA定義(或接收)的語言,記爲L(M )
表示:轉換圖和轉換表
轉換圖:初始狀態(start箭頭指向)、終止狀態(雙圈)、帶有標記的有向邊、其他結點
轉換表:一個二維表,填寫對應輸入下的下一結點
分類:確定的有窮自動機(DFA)
非確定的有窮自動機(NFA)
形式化定義M = ( S, Σ , δ,s0, F )
S: 有窮狀態集(就是結點)
Σ: 輸入字母表,即輸入符號集合。 假設ε不是 Σ中的元素
δ: 將S× Σ映射到S的轉換函數。轉換到的新狀態唯一
s0: 開始狀態 (或初始狀態), s0∈ S
F: 接收狀態(或終止狀態) 集合, F⊆ S
形式化定義M = ( S, Σ , δ, s0, F )
S:有窮狀態集
Σ: 輸入符號集合,即輸入字母表。假設ε 不是Σ中的元素
δ: 將S× Σ映射到2S的轉換函數。轉換的新狀態不唯一,用一個集合來表示
s0:開始狀態 (或初始狀態), s0∈ S
F:接收狀態(或終止狀態)集合, F⊆ S
ps:DNA和NFA是等價的,都能互相轉換
帶有和不帶有「ε-邊」的NFA 也是等價的
三者都是可以互相轉換的
NFA是比較直觀也容易轉化的,而DFA看起來比較複雜,但是對於計算機而言,確定的自動機處理起來纔是比較舒服的。因此,從正則表達式到DFA,我們可以先從正則表達式到NFA,再從NFA到DFA
轉換原理
若轉換後的節點有多種情況,則可以將這個集合作爲一個新的節點,再判斷這個集合內的元素是否有可以轉換的新結點
帶有ε 邊的NFA,在轉換的過程中記住,ε 邊可以不用轉換直接到達下一個結點。
具體的過程可以看哈工大編譯原理課程
視頻介紹的方式還是比較直觀的,其方法適合直接觀察直接的轉換。
如果需要真正的解題過程需要列出轉換表,重新構造轉換圖。可以參考博文NFA到DFA
詞法分析部分的概念還是比較多的,重點在於理解每一個概念的基本定義,通過他們的聯繫串聯起來就可以很好地記住。
詞法分析的目的在於將字符流轉換單詞流,從而作爲語法分析的輸入,這一章的內容其實就是在說這一個步驟。