《Compiler Design in C》(龍書/虎書之外的工程導向經典)提供了完整的 C 版詞法/語法分析器生成器代碼。本文記錄將其 **核心數據結構、狀態機構建、模板驅動代碼生成** 移植至 Java 的全過程,並輸出清晰的 **七張架構圖**,展示從字符流輸入到 DFA 生成的完整鏈路。項目已開源,可直接克隆運行。
Lexer.java;RegExp.parse() → NFAFragment → NFA.build() → DFA.subsetConstruction() → DFA.minimize() → Emitter.emit();

| 模塊 | 核心算法/數據結構 | Java 移植要點 |
|---|---|---|
| 正則解析 | 遞歸下降 + 運算符優先級 | 用 Enum 替代 C 宏,Visitor 模式輸出 AST |
| NFA 構建 | Thompson 構建法 | 不可變片段類、Builder 模式組裝 |
| 子集構造 | BFS + ε-closure 計算 | 用 BitSet 優化狀態集合運算 |
| DFA 最小化 | Hopcroft O(n log n) 分區細化 | 遞歸改迭代防棧溢出 |
| 代碼發射 | 模板引擎(自研簡易版) | 佔位符 ${...} + 邏輯塊 #{if}...#{end} |