enum TokenType { NONE, KEYWORD, INT, FLOAT, SYMBOL, VARIABLE, STRING, CHAR, COMMENT };
struct Token {
TokenType type;
std::string text;
size_t line_no;
// 建構子、setter...
};
IN_NONE:初始/分隔符狀態IN_ID:識別字/關鍵字IN_NUM:數字常數(含十六進位、浮點、科學記號)IN_STR:雙引號字串IN_CHAR:單引號字元IN_CMT1:// 單行註解IN_CMT2:/* */ 多行註解IN_SYM:運算子/標點(需向前看一字元判斷雙字元運算子如 ==, &&)unordered_set 判斷是否為關鍵字。U, L, UL, F 等後綴併入 Token 文本,語法分析階段再解析。*/ 結束,支援巢狀(可選)。\n, \t, \\, \", \' 等。對 Nginx 原始碼(約 10 萬行)完整跑測,Token 化結果與人工檢查一致,唯已知限制:
_Bool, _Complex, // 註解已支援)需擴充關鍵字表。// states.h: 狀態枚舉
// token.h: Token 定義
// scanner.h: Scanner 類別宣告
// scanner.cpp: 掃描主邏輯(巨大 switch-case 狀態機)
// main.cpp: 讀檔、呼叫 scanner、輸出 Token 串流
#line 指令支援,利於預處理器整合。flex/re2c 產生器,從正規表示式自動生成掃描器,提升維護性。