(编译原理) 第四讲 语法分析

自顶向下的分析

  1. 通用形式:递归下降分析
  2. 预测分析不需要回溯
  • 不确定的分析:需要回溯的分析
  • 预测分析:确定的分析

最左推导

总是选择每个句型的最左非终结符进行替换。
在这里插入图片描述

最右推导

  1. 总是选择每个句型的最右非终结符进行替换。
    在这里插入图片描述

  2. 最左归约是最右推导的逆过程,最左归约称为规范归约,而最右推导相应地称为规范推导

  3. 最左推导和最右推导的唯一性

文法转换

  1. 消除歧义
  • 同一非终结符的多个候选式存在共同前缀,例如S->aAd | aBe
  • 无二义性不一定确定性,确定性一定无二义性在这里插入图片描述
  1. 直接左递归文法、间接左递归文法
  2. 消除直接左递归 :将左递归转换成了右递归,引进了一些非终结符和产生式
    在这里插入图片描述
  3. 消除间接左递归 :
    在这里插入图片描述
  4. 提取左公因子
    在这里插入图片描述

LL(1)文法

  1. S文法

  2. Q文法

  3. FISRT(a): 串首终结符集合

  • 相对于而言
  • a能够推出的所有终结符串中位于串首的那些终结符构成
  1. FOLLOW(A):非终结符的后继符号集
  • 相对于非终结符而言
  • 可以在某句型中紧跟在A后边的终结符构成的集合
    在这里插入图片描述
    在这里插入图片描述
  • 计算FOLLOW(A)
    在这里插入图片描述

LL(1)文法

  1. LL(1)文法:(针对上下文无关文法而言)
    在这里插入图片描述

习题解答

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

预测分析法

实现步骤:

  1. 构造文法
  2. 改造文法:消除二义性、消除左递归、消除回溯
  3. 求每个变量的FIRST集和FOLLOW集,从而求得每个候选式的SELECT集
  4. 检查是不是LL(1)文法。若是,则构造预测分析表
  5. 进行递归的预测分析或非递归的预测分析

递归的预测分析法

根据预测分析表为每个非终结符编写递归下降过程

  • 根据预测分析表
    在这里插入图片描述

非递归的预测分析法

根据预测分析表构造一个自动机,也叫表驱动的预测分析

  • 预测分析表
    在这、里插入图片描述
    在这里插入图片描述

对比

在这里插入图片描述

错误处理

  1. 恐慌模式
  • 同步词法单元集合
  • 如果终结符在栈顶而不能匹配,简单的办法是弹出此终结符
  1. 分析表使用方法
    在这里插入图片描述

自底向上分析

  1. 最左归约,移入归约分析
  2. 移入-归约存在的问题
    在这里插入图片描述

错误识别了句柄

  1. 句柄L句型的最左直接短语

问题

  1. 为什么这步不用(3)归约
    在这里插入图片描述
发布了109 篇原创文章 · 获赞 128 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/JAck_chen0309/article/details/104630284