理解 C 語言詞法分析規則,是寫出無歧義、高可讀性代碼的關鍵。本文深入解析符號邊界、空白字符處理、貪心法原理,並以經典案例示範如何避免編譯器誤解。
詞法分析 → 語法分析 → 語義分析 → 中間代碼生成 → 優化 → 目標代碼生成
詞法分析輸出「單詞」(Token),即程式的基本構成單元。
// 這兩段完全等效
if(1 < x)
if
(
1
<
x
)
關鍵點:
if 是單一符號,i f 是兩個符號(無效)++ // 自增運算符(單一符號)
+ + // 兩個加法運算符
+++ // 貪心法解析為 ++ +(自增 + 加法)
編譯器採用貪心法:從左到右,盡可能吞噬最長的有效符號。
result = num/*p;
// 貪心法解析:result = num / *p 還是 result = num /* 註釋開始?
// 實際解析:result、=、num、/*、p、; → 其餘視為註釋!
修正方法:
result = num / *p; // 空格切斷貪心
result = num / (*p); // 括號顯式指定(推薦)
| 場景 | 不推薦 | 推薦 |
|---|---|---|
| 指針解引用除法 | a/*p | a / *p 或 a / (*p) |
| 複雜表達式 | a+b*c | a + b * c |
| 函數調用 | func(a,b) | func(a, b) |
| 運算符組合 | a+++b | a++ + b |
/ *)