# Parser - 語法分析理論
`src/parser/parser.rs`
## 語法分析器理論
語法分析(Parsing)是編譯器第二階段,將 token 流轉換為 AST。
```
Token 流 → [Parser] → AST → [Planner] → 執行计划
```
## 文法分類
### 上下文無關文法 (CFG)
SQL 語法可用上下文無關文法描述:
```
SELECT_STMT → SELECT COLUMNS FROM TABLE WHERE_CLAUSE
### First(α)
文法符號 α 開頭可能出現的 token 集合。
### Follow(A)
文法符號 A 後面可能出現的 token 集合。
用於錯誤恢復和空規則處理。
## 語法錯誤處理
| Panic Mode | 跳過輸入直到同步點 |
| Phrase Level | 嘗試個別插入/刪除 |
| Error Production | 將常見錯誤納入文法 |
## 運算子優先級
透過文法層級實現:
```
`*` 的文法層級低於 `+`,自然形成優先級。
## 左递归消除
左遞迴會導致無限遏迴:
```
EXPR → EXPR + TERM // 左遞迴
```
改寫為:
```
EXPR → TERM EXPR'
## 理論參考
- Aho, Lam, Sethi, Ullman - "Compilers"
- LL(1) parsing theory
- Recursive descent parsing
- Operator precedence parsing