自頂向下語法分析的分析類型
最右推導的反序(從葉子到根)
自頂向下和自底向上的比較
語法分析類別 | 語法分析樹 |
---|---|
自底向下 | |
自頂向下 |
自底向上語法分析
句柄(handle):分析樹最右邊有父子兩代的子樹,從左到右
1. 加S’ → S
不管左遞歸、左因子
2. 狀態轉換圖(DFA)
狀態轉換圖沒有ε:因爲他是DFA,DFA沒有ε轉換
3. 分析表(狀態轉換表,包含$)
三種可能操作:
- Shift:移進
如S2,表示移入一個字符,並轉換到狀態2 - Reduce: 規約
將分析串包含棧頂的一個字串按一個產生式替換成一個非終結符
如R2,按編號爲2的產生式規約。規約後的狀態,由前一個沒參與規約的狀態,GOTO當前規約所得非終結符得到 - Accept: 狀態裏有S’ → S·
4. 分析過程(開始狀態爲0)
各種自底向上算法
算法 | 特點 |
---|---|
LR(0) | 狀態轉換圖:加入搜索符·,表示當前位置 Reduce操作,直接填滿該狀態所有Action |
SLR(1) | 狀態轉換圖同LR(0) Reduce操作,只填在屬於規約出非終極符Follow集的Action |
LR(1) | 狀態轉換圖:加入一個向前看符號:該產生式左邊的非終結符,後一個終結符。 向前看符號是終結符Follow集的子集,所以比SLR更精細。用於表示當前上下文的具體情況) 狀態表:Reduce只填在向前看符號 |
LARL(1) | 合併同心集(只有向前看符號不同的項目) |
判斷是不是某一種自底向上算法?
狀態圖(或者狀態表)沒有衝突(衝突具體爲移進-規約、規約-規約衝突)