跳转至

7 活前缀

活前缀

简言之活前缀(可行前缀 viable prefix)就是 LR 分析机的栈中内容,比如在某个格局中栈中内容是 \alpha 而剩下的输入串是 x,则 S\Rightarrow_{rm}^*\alpha x

定义:右句型的前缀,这个前缀不超过最右句柄的右端,也可以说是可以出现在分析器栈中的最右句型的前缀

  • 在活前缀的右端加上一些终结符,可以使之成为右句型
  • 只要已扫描部分可以规约成一个活前缀,则意味着已扫描的部分没有错误
  • LR 分析栈中的文法符号总是构成活前缀
  • 对每个文法 G,项目集规范族的 goto 函数定义了一个 DFA,它识别 G 的活前缀

对于活前缀的理解

  • 如果存在一个推导过程 S\Rightarrow_{rm}^+ \alpha Aw\Rightarrow_{rm}\alpha\beta_1\beta_2w,则项 [A→\beta_1·\beta_2] 对于活前缀 \alpha\beta_1 有效。
  • 当我们在语法分析栈中发现 \alpha\beta_1 时,上述有效信息可以帮助我们做出 S-R 决策。
  • 如果 \beta_2\neq \varepsilon,则句柄还没有被全部移入栈中,应该选择 Shift
  • 如果 \beta_2=\varepsilon,则 A→\beta_1 看起来就是句柄,应该按照这个产生式 Reduction

image-20221016125747067

image-20221016130031171

本文阅读量