詞法分析器的實現是什麼?


詞法分析是編譯器的第一步,它一次讀取原始碼一個字元,並將其轉換為令牌陣列。令牌是程式中具有意義的字元集合。這些令牌可以是關鍵字,包括 do、if、while 等,以及識別符號,包括 x、num、count 等,以及運算子符號,包括 >、>=、+ 等,以及標點符號,包括括號或逗號。詞法分析階段的輸出傳遞到下一個階段,稱為語法分析器或解析器。

語法分析器或解析器也稱為解析階段。它從詞法分析階段獲取令牌作為輸入。語法分析器將令牌組合成語法結構。此階段的輸出是語法樹。

詞法分析的功能

詞法分析的主要功能如下:

  • 它可以從程式中分離令牌,並在解析器請求時將其返回給解析器。

  • 它可以消除字串中的註釋、空格、換行符等。

  • 它可以將令牌插入符號表。

  • 詞法分析將為解析器中的每個令牌返回一個整數。

  • 去除註釋和空格(製表符、換行符、空格和其他用於分隔輸入中令牌的字元)。

  • 編譯器在詞法分析器期間生成的與源程式相關的錯誤訊息。

  • 它可以在宏的情況下實現宏的擴充套件,在原始碼中使用預處理器。

LEX 透過獲取 LEX 程式作為輸入來生成詞法分析器作為輸出。LEX 程式是模式(正則表示式)及其對應動作的集合。

模式表示要由生成的詞法分析器識別的令牌。對於每個模式,都將設計一個對應的 NFA。

對於 n 個模式,可以有 n 個 NFA。

示例 - 如果模式為 { }

P1 { }
P2 { }
Pn { }

則對應模式的 NFA 將為 -

取一個起始狀態,並使用 ϵ 轉換,所有這些 NFA 都可以連線起來以建立組合 NFA -

每個 NFA 的最終狀態表明它已找到其令牌 Pi

它將組合 NFA 轉換為 DFA,因為使用程式模擬 DFA 的行為總是很容易的。

最終狀態顯示我們找到了哪個令牌。如果 DFA 的任何狀態都不包含 NFA 的任何最終狀態,則控制權將返回到錯誤條件。

如果 DFA 的最終狀態包含多個 NFA 的最終狀態,則翻譯規則中第一個出現的模式的最終狀態具有優先順序。

更新於:2021年10月26日

10K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.