以下哪一项恰当地描述了句柄(适用于 LR 解析)?
(A)它是句子形式中将发生下一个移位或减少操作的位置
(B)非终端,其生产将用于下一步还原
(C)它是一个产生式,可用于未来步骤中的归约以及句子形式中将发生下一个移位或归约操作的位置
(D)产生式 p 将用于下一步的归约以及句子形式中可以找到产生式右侧的位置答案: (D)
说明:让我们首先了解这里使用的术语。
LR Parsing – 这里的“L”代表从左到右筛选输入字符串,“R”代表最右反向推导(因为它是关于自底向上的解析)。
句子形式——假设对于给定的上下文无关文法 G,我们有一个起始符号 S,然后为了定义由文法 G 生成的语言,即 L(G),我们使用文法的产生式规则从 S 开始推导。经过一次完整的推导,我们得到一个仅由终结符组成的字符串w,即 w 属于 L(G)。那么我们可以说 w 是语法 G 的一个句子。 现在,在推导过程中,如果它得到某种形式 q,其中 q 可能包含一些非终结符,那么我们说 q 是语法 G 的一个句子形式。甚至开始符号 S 也是语法 G 的句子形式(因为它也包含非终结符 S)。
For Ex :
Grammar is :
S-> aAcBe
A->Ab|b
B->d
Input string : abbcde
Derivation : ( Top-Down, Right Most Derivation)
S->aAcBe
->aAcde
->aAbcde
->abbcde
这里{abbcde}是语法的句子(因为它只包含终结符),而{S,aAcBe,aAcde,aAbcde}是G的句子形式(因为这些形式在推导过程中包含了非终结符)
现在,让我们来看看这个问题。
该问题与 LR 解析有关,这是一种自底向上的解析。
让我们采用上面相同的语法,因为它是自下而上的解析,我们需要从字符串“abbcde”开始并尝试使用产生式规则获取 S。
: abbcde
->aAbcde ( using A-> b )
->aAcde ( using A-> Ab )
->aAcBe ( using B -> d )
->S ( using S-> aAcBe )
上述过程称为还原。
正被其 LHS 替换的生产的 RHS 称为句柄,因此,{ b, Ab, d, aAcBe} 是句柄,用其 LHS 替换它称为句柄修剪。
因此选项 D 最适合。这个问题的测验