编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法
本文要点
- 理解 “能使用自顶向下分析技术的文法必须是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]表示出错。)
还没有评论,来说两句吧...