核心概念

增广文法

对于起始符号为 的文法 ,增加一条产生式 ,初始符号设为 ,得到增广文法

活前缀

,且 ,则 的任何前缀均为活前缀

  • 直观上讲,活前缀是一个右句型的前缀,且或不包含句柄,或句柄是它的后缀。它不能包含句柄后的任何符号。

LR(0) FSM 的构造

  • 一个 LR(0) 项目是在右端某一位置有圆点的产生式
    • 产生式 对应 4 个 LR(0) 项目:
    • 圆点标志着已分析过的串与该产生式匹配的位置
  • 根据圆点所在位置和圆点后是否是终结符分为以下几种:
    • 移进项目:
    • 待约项目:
    • 归约项目:
    • 接受项目:
  • LR(0) FSM 的状态是一个 LR(0) 项目集的闭包,计算方法:
    • 对于项目集 ,重复:对于其中每个项目 和产生式 ,加 中,直到没有新项目加入
  • 初态
  • 转移函数,其中
  • 从初态开始重复遍历所有状态和文法符号 可以构造出所有状态

增广文法的每个活前缀都有唯一对应的状态。

LR(0) 分析表的构造

,状态 对应的 LR(0) 分析表的栈顶状态为

  • 若项目 为终结符,则
  • 若项目 ,则对任何终结符 ,其中 为第 个产生式
  • 若项目 ,则
  • 为非终结符,则
  • 其余位置为

LR(0) 文法

按上述算法构造的分析表,如果各表项无多重定义,则称该文法为一个 LR(0) 文法

LR(0) FSM 中,每个状态满足:

  • 不同时含有移进项目和归约项目
  • 不含有两个以上归约项目