本文要點
- 理解 “能使用自頂向下分析技術的文法必須是LL(1)文法”
- LL(1)文法的充要條件
- LL(1)文法的判別
- 某些 非LL(1)文法 到 LL(1)文法 的等價變換
1.提取左公共因子
2.消除左遞歸(直接左遞歸、間接左遞歸) - 不確定的自頂向下分析思想
- 確定的自頂向下分析方法
1.遞歸子程序法
2.預測分析法[判別LL(1)文法;構造預測分析表;分析輸入串]
4.1 確定的自頂向下分析思想
主要思想:
從文法的開始符號出發,如何根據當前的單詞符號,
唯一地確定選用哪個產生式來替換相應的VN向下推導。
4.2 LL(1)文法的判別
判別步驟:
- 求出能推出ε的非終結符
- 計算FIRST集
- 計算FOLLOW集
- 計算SELECT集
- 判別是否是LL(1)文法
4.3 某些非LL(1)文法到LL(1)文法的等價變換
4.3.1 提取左公共因子
4.3.2 提取隱含的左公共因子
4.3.3 不能在有限步驟內提取完左公共因子的文法
4.3.4 消除左遞歸
4.3.5 消除直接左遞歸
4.3.6 消除間接左遞歸
4.3.7 消除文法中一切左遞歸
4.4 確定的自頂向下分析方法
構造預測分析表的方法:
對每個VT或“#”用符號a表示。
若a∈SELECT(A–>α),則把A–>α放入M[A,a]中。
(所有空白的M[A,a]表示出錯。)
4.5 不確定的自頂向下分析思想