LR(1) 项目

LR(1) 项目是带搜索符的二元组:

  • :LR(0) 项
  • :搜索符(展望符),

含义:在 归约为 后,期望下一个输入符号是

搜索符传播

LR(1) 中 B 包计算需要处理搜索符:

LR(1) 闭包计算

对于项目集

  1. ,则对每个 和每个 ,将 加入

搜索符传播规则——从 的后继符号中取第一个终结符。

LR(1) GO 函数

搜索符在 GO 函数中保留不变

重点 B 包中搜索符计算:

LR(1) 项目集规范族构造

同 LR(0) 流程,但使用 LR(1) 的 B 包和 GO 函数:

  1. C = \{ closure(\{ [S' \to ·S, \] }) }$
  2. 中每个 和每个文法符号 ,若 ,则加入
  3. 重复直到不动点

LR(1) 分析表构造

规则 1(移进):若 ,则

规则 2(规约):若 ),则

规则 3(接受):若 [S' \to S·, \] \in I_kACTION[k, $] = ACC$

规则 4(GOTO):若 ),则

LR(1) 的关键优势:规约仅对搜索符进行,而非 FOLLOW 集中的所有符号。

重点 LR(1) 项目二元组结构,搜索符精确控制规约时机。