跳转至

3 句柄

一般来说,一个句型的句柄是句型中一个和产生式右部匹配的子串,称之为句柄就意味着其可以规约,但不总是这样,上一页的例子中提到 aAb 不能规约成 aAA,虽然 bA→b 右部的子串,但是在这里因为不能规约,所以这里 b 不是句柄。

严谨定义:一个右句型 \gamma 的句柄 \delta 是某个产生式(例如 A→\beta)右部 \beta\gamma 中的一个位置 N(从1开始计数)。

  • \gamma[N] 处,可以找到串 \beta
  • A 替代 \delta,得到的是最右推导的前一个右句型

即:如果 S\Rightarrow^*_{rm}\alpha Aw\Rightarrow_{rm}\alpha\beta w,那么在 \alpha 之后的 \beta 是串 \alpha\beta w 的一个句柄。

由于是最右推导,所以句柄右侧(上面的例子中是 w)只有终结符,实际上就是尚未处理的输入串。

之所以强调“一个”,是因为文法二义会导致句柄不唯一。

文法二义导致句柄不唯一

例如文法:E→E+E|E*E|(E)|\textbf{id}

image-20221003114658589

因为二义文法可能存在两个最右推导!

本文阅读量