目錄
- 1. 自頂向下分析(Top-Down Parsing)
- 最左推導(Left-most Derivation)
- 最右推導(Right-most Derivation)
- 最左推導和最右推導的唯一性
- 自頂向下語法分析的通用形式
- 預測分析(Predictive Parsing)
- 2. 自底向上分析: 移入規約分析(Shift-Reduce Parsing)
1. 自頂向下分析(Top-Down Parsing)
-
從分析樹的頂部(根節點)向底部(葉節點)方向構造分析樹
-
可以看成是從文法開始符號S推導出詞串w的過程

-
每一步推導中,都需要做兩個選擇
- 替換當前句型中的哪個非終結符
- 用該非終結符的哪個候選式進行替換
最左推導(Left-most Derivation)

自頂向下的語法分析采用最左推導方式.

最右推導(Right-most Derivation)

最左推導和最右推導的唯一性

自頂向下語法分析的通用形式

預測分析(Predictive Parsing)

1.1. 文法轉換
問題1---回溯

問題2---左遞歸導致無限循環

消除直接左遞歸

消除直接左遞歸的一般形式

消除間接左遞歸
合並產生式, 將間接左遞歸變成直接左遞歸再消除


消除左遞歸算法


在每個終結符的循環內:
- 先將所有比該終結符小的(標號小)終結符替換為產生式
- 然后消除改終結符產生式之間的立即左遞歸
提取左公因子(Left Factoring)

推遲進入候選式的選擇, 減少回溯長度
提取左公因式算法

1.2. LL(1)文法
S_文法

如果S_文法包含ε產生式,那么它就成為了LL文法

非終結符的后繼符號集(FOLLOW)

串首終結符集(FIRST)

產生式的可選集(SELECT)

LL(1)文法概念

FIRST集計算

算法:

計算串X1X2…Xn的FIRST集合:

FOLLOW集計算


SELECT集計算

預測分析表

1.3. LL(1)文法的分析方法
遞歸的預測分析法









非遞歸的預測分析法(表驅動)



遞歸的預測分析法vs.非遞歸的預測分析法

預測分析法實現步驟

預測分析法中的錯誤檢測

預測分析法中的錯誤恢復



2. 自底向上分析: 移入規約分析(Shift-Reduce Parsing)


移入-歸約分析的工作過程

移入-歸約分析器可采取的4中動作

移入-歸約分析中存在的問題
選用哪個產生式?

句柄: 句型的最左直接短語
正確的應該是:

(句型的)短語

2.1. LR分析法

LR分析法的基本原理

LR分析器(自動機)的總體結構

LR分析表的結構 及 分析過程


LR分析器的工作過程

LR分析算法

如何構造給定文法的LR分析表
- LR(0)分析
- SLR分析
- LR(1)分析
- LALR分析
2.2. LR(0)分析
LR(0)項目


增廣文法(Augmented Grammar)


LR(0)分析表的構造算法
CLOSURE()函數

GOTO()函數

構造LR(0)自動機的狀態集

LR(0)分析表構造算法

LR(0)自動機的形式化定義

LR(0)分析過程中的沖突

可能存在:
-
移進 - 歸約 沖突
-
歸約 - 歸約 沖突
- 如果LR(0)分析表中沒有語法分析動作沖突,那么給定的文法就稱為LR(0)文法
- 不是所有CFG都能用LR(0)方法進行分析, 也就是說, CFG不總是LR(0)文法
2.3. SLR分析
S: simple
移入優先, 用FOLLOW集來判斷是用哪個產生式歸約
- 解決了一些 移入 - 歸約 沖突
- 解決了 歸約 - 歸約 沖突 (每個相同 產生式左部的FOLLOW集交集為∅)
LR分析的產生式滿足LL分析產生式的條件嗎??

SLR條件


SLR分析表構造算法

SLR分析中的沖突

2.4. LR(1)分析
LR(1)的提出

規范LR(1)項目

等價LR(1)項目

賦值語句文法的LR(1)分析表



LR(1)項目集閉包

GOTO函數

為文法 G' 構造LR(1)項集族

LR(1)自動機的形式化定義

LR分析表構造算法

2.5. LALR分析(lookahead-LR)
基本思想

合並同心項集

合並同心項集時產生 歸約-歸約沖突的例子

合並同心項集后, 雖然不產生沖突, 但可能會推遲錯誤的發現

LALR(1)的特點


2.6. 二義性文法的LR分析
二義性文法分析

二義性算術表達式文法的LR(0)分析器

二義性算術表達式文法的SLR分析表


二義性if語句文法的SLR分析表

**應該保守地使用二義性文法, 並且必須在嚴格控制之下使用, 英文稍有不慎就會導致語法分析器所識別的語言出現偏差. **
2.7. LR分析中的錯誤處理

恐慌模式錯誤恢復

短語層次錯誤恢復



