編譯原理課程學習-詞法分析

編譯原理課程學習-詞法分析

概念整理

相關資料來源:慕課哈工大編譯原理課程

在這裏插入圖片描述

正則表達式

  • 定義:用於描述正則語言更緊湊的表示方法,用符號爲r表示
  • 每個正則表達式 r定義(表示) 一個語言,記爲L(r )。
  • 運算:*、 連接、 | (優先級從高到低)

在這裏插入圖片描述

正則定義

  • 就是給一個正則表達式RE取一個別名,就可以像字母表內的元素一樣來使用

有窮自動機(FA)

  • 定義:根據目前所處的狀態和輸入信息來決定後繼行爲的數學模型(類似電梯)

  • 用M表示有窮自動機,某個串可以從初始狀態到達最終狀態則說該串被FA接收

  • 由一個有窮自動機M接收的所有串構成的集合稱爲是
    該FA定義(或接收)的語言,記爲L(M )

  • 表示:轉換圖和轉換表

    • 轉換圖:初始狀態(start箭頭指向)、終止狀態(雙圈)、帶有標記的有向邊、其他結點

      在這裏插入圖片描述

    • 轉換表:一個二維表,填寫對應輸入下的下一結點

  • 分類:確定的有窮自動機(DFA)

    ​ 非確定的有窮自動機(NFA)

DFA

  • 形式化定義M = ( S, Σ , δ,s0, F )
    S: 有窮狀態集(就是結點)
    Σ: 輸入字母表,即輸入符號集合。 假設ε不是 Σ中的元素
    δ: 將S× Σ映射到S的轉換函數。轉換到的新狀態唯一
    s0: 開始狀態 (或初始狀態), s0∈ S
    F: 接收狀態(或終止狀態) 集合, F⊆ S

    在這裏插入圖片描述

NFA

  • 形式化定義M = ( S, Σ , δ, s0, F )
    S:有窮狀態集
    Σ: 輸入符號集合,即輸入字母表。假設ε 不是Σ中的元素
    δ: 將S× Σ映射到2S的轉換函數。轉換的新狀態不唯一,用一個集合來表示
    s0:開始狀態 (或初始狀態), s0∈ S
    F:接收狀態(或終止狀態)集合, F⊆ S

    在這裏插入圖片描述

帶有「ε-邊」的NFA

  • 形式化定義M = ( S, Σ , δ, s0, F )
    S:有窮狀態集
    Σ: 輸入符號集合,即輸入字母表。假設ε不是Σ中的元素
    δ: 將S× (Σ∪ {ε})映射到2S的轉換函數。區別在於轉換的條件可以是ε
    s0:開始狀態 (或初始狀態), s0∈ S
    F:接收狀態(或終止狀態)集合, F⊆ S

ps:DNA和NFA是等價的,都能互相轉換

​ 帶有和不帶有「ε-邊」的NFA 也是等價的

概念區別總結

  • 正則文法:3型文法,描述正則語言的規則 (推導式)
  • 正則表達式:描述正則語言的簡易形式 (*、 連接、 | 和元素連接的形式)
  • FA:根據當前情況決定後繼的數學模型 (轉換圖、轉換表)

三者都是可以互相轉換的

正則表達式到有窮自動機

NFA是比較直觀也容易轉化的,而DFA看起來比較複雜,但是對於計算機而言,確定的自動機處理起來纔是比較舒服的。因此,從正則表達式到DFA,我們可以先從正則表達式到NFA,再從NFA到DFA

從正則表達式到NFA

轉換原理

在這裏插入圖片描述

從NFA到DFA

若轉換後的節點有多種情況,則可以將這個集合作爲一個新的節點,再判斷這個集合內的元素是否有可以轉換的新結點

帶有ε 邊的NFA,在轉換的過程中記住,ε 邊可以不用轉換直接到達下一個結點。

具體的過程可以看哈工大編譯原理課程

視頻介紹的方式還是比較直觀的,其方法適合直接觀察直接的轉換。

如果需要真正的解題過程需要列出轉換表,重新構造轉換圖。可以參考博文NFA到DFA

總結

詞法分析部分的概念還是比較多的,重點在於理解每一個概念的基本定義,通過他們的聯繫串聯起來就可以很好地記住。

詞法分析的目的在於將字符流轉換單詞流,從而作爲語法分析的輸入,這一章的內容其實就是在說這一個步驟。