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

