首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 詞法分析器(一):詞法分析導論

     編輯:關於C#

前言

編譯原理研究從源代碼到可執行程序的轉換過程。經典編譯器包含 7 大步驟:詞法分析、語法分析、語義分析、中間代碼生成、代碼優化、代碼生成、目標代碼優化。前四屬前端,後三屬後端。詞法分析是編譯器第一步,也是本系列主題。

一、什麼是詞法分析

詞法分析器讀入字符流,輸出詞法單元流。將源程序「切」成有意義的片段(詞素),每個詞素產生一個 Token。Token 包含:

  • Id:類型標識(枚舉值,編譯期檢查)
  • Text:原始詞素文本
  • Start/End:源碼位置(索引、行、列)
  • Value:附加語義值

示例:12+34*9 → digit(12) + operator(+) digit(34) operator(*) digit(9)。空白/註釋可被過濾。

二、如何描述詞素:模式與正則表達式

模式描述詞法單元可能形式。如 digit = [0-9]+、operator = [+\-*/]。詞法分析器據此識別 12 為詞素而 2+3 不是。正則表達式是模式的標準表示,僅保留字符串匹配能力,無分組/替換等高級功能。

三、有限自動機識別正則語言

  • NFA:允許 ε 轉移、非確定轉移。匹配需維護狀態集合
  • DFA:每狀態每字符唯一確定轉移。匹配極快 O(k)

兩者識別能力相等,均等價於正則表達式。詞法分析器採用 DFA 執行。

四、系列規劃

  1. 輸入緩衝與定位
  2. 正則表達式定義與解析
  3. 正則 → NFA (Thompson 構造)
  4. NFA → DFA (子集構造 + 最小化)
  5. 基於 DFA 的詞法分析器構建(基礎、向前看、Reject、上下文)
  6. 實戰範例

目標:構建可用的詞法分析器庫,雖未達 Flex 從定義文件生成代碼級別,但核心功能完備。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved