LR(1) 项目
LR(1) 项目是带搜索符的二元组:
- :LR(0) 项
- :搜索符(展望符),
含义:在 归约为 后,期望下一个输入符号是 。
搜索符传播
LR(1) 中 B 包计算需要处理搜索符:
LR(1) 闭包计算
对于项目集 :
- 若 ,则对每个 和每个 ,将 加入
搜索符传播规则:——从 的后继符号中取第一个终结符。
LR(1) GO 函数
搜索符在 GO 函数中保留不变。
重点 B 包中搜索符计算:。
LR(1) 项目集规范族构造
同 LR(0) 流程,但使用 LR(1) 的 B 包和 GO 函数:
- C = \{ closure(\{ [S' \to ·S, \] }) }$
- 对 中每个 和每个文法符号 ,若 ,则加入
- 重复直到不动点
LR(1) 分析表构造
规则 1(移进):若 且 ,则
规则 2(规约):若 (),则
规则 3(接受):若 [S' \to S·, \] \in I_kACTION[k, $] = ACC$
规则 4(GOTO):若 (),则
LR(1) 的关键优势:规约仅对搜索符进行,而非 FOLLOW 集中的所有符号。
重点 LR(1) 项目二元组结构,搜索符精确控制规约时机。