编译原理(四)自顶向下语法分析方法、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)文法;构造预测分析表;分析输入串]
    在这里插入图片描述

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

主要思想:
从文法的开始符号出发,如何根据当前的单词符号
唯一地确定选用哪个产生式来替换相应的VN向下推导。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 LL(1)文法的判别

判别步骤:

  1. 求出能推出ε的非终结符
  2. 计算FIRST集
  3. 计算FOLLOW集
  4. 计算SELECT集
  5. 判别是否是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 不确定的自顶向下分析思想

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章