编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法

本文要点

  1. 理解 “能使用自顶向下分析技术的文法必须是LL(1)文法
  2. LL(1)文法的充要条件
  3. LL(1)文法的判别
  4. 某些 非LL(1)文法LL(1)文法 的等价变换
    1.提取左公共因子
    2.消除左递归(直接左递归、间接左递归)
  5. 不确定的自顶向下分析思想
  6. 确定的自顶向下分析方法
    1.递归子程序法
    2.预测分析法[判别LL(1)文法;构造预测分析表;分析输入串]
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第1张图片

4.1 确定的自顶向下分析思想

主要思想:
从文法的开始符号出发,如何根据当前的单词符号
唯一地确定选用哪个产生式来替换相应的VN向下推导。
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第2张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第3张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第4张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第5张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第6张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第7张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第8张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第9张图片

4.2 LL(1)文法的判别

判别步骤:

  1. 求出能推出ε的非终结符
  2. 计算FIRST集
  3. 计算FOLLOW集
  4. 计算SELECT集
  5. 判别是否是LL(1)文法
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第10张图片
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第11张图片
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第12张图片
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第13张图片
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第14张图片
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第15张图片
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第16张图片
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第17张图片
    编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第18张图片

4.3 某些非LL(1)文法到LL(1)文法的等价变换

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第19张图片

4.3.1 提取左公共因子

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第20张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第21张图片

4.3.2 提取隐含的左公共因子

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第22张图片

4.3.3 不能在有限步骤内提取完左公共因子的文法

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第23张图片

4.3.4 消除左递归

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第24张图片

4.3.5 消除直接左递归

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第25张图片

4.3.6 消除间接左递归

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第26张图片

4.3.7 消除文法中一切左递归

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第27张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第28张图片

4.4 确定的自顶向下分析方法

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第29张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第30张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第31张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第32张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第33张图片
构造预测分析表的方法:
对每个VT或“#”用符号a表示。
若a∈SELECT(A–>α),则把A–>α放入M[A,a]中。
(所有空白的M[A,a]表示出错。)
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第34张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第35张图片

4.5 不确定的自顶向下分析思想

编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第36张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第37张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第38张图片
编译原理(四)自顶向下语法分析方法、LL(1)文法的判别、非LL(1)文法转换为LL(1)文法_第39张图片

你可能感兴趣的:(编译原理,自顶向下语法分析方法,LL1文法的判别,非LL1文法转换为LL1文法,提取左公共因子,消除左递归)