📜  什么是手柄修剪?

📅  最后修改于: 2022-05-13 01:57:01.281000             🧑  作者: Mango

什么是手柄修剪?

句柄是与产生式的主体匹配的子字符串,该产生式的归约表示一个步骤以及最右派生的反向。

右序列形式 Y 的句柄是 Y 的产生式,其中可以找到字符串S 并将其替换为 A 以产生 Y 的 RMD(Right Most Derivation)中的前一个右序列形式。

句型这里是S => a,'a'称为句型,'a'可以是终结符和非终结符的混合。

例子:

Consider Grammar : S -> aSa | bSb | ε
Derivation:              S => aSa => abSba => abbSbba => abbbba

左句和右句形式:

  • 左句式是出现在某个句子的最左派生词中的句式。
  • 右句式是出现在某个句子的最右派生中的句式。

句柄包含两件事:

  • 生产
  • 位置

例子:  

S -> aABe
A -> Abc | b
B -> d

脚步:

abbcde : γ = abbcde , A->b; Handle = b
aAbcde : γ = RHS = aAbcde , A->Abc; Handle = Abc
aAde : γ = aAde , B->d; Handle = d
aABe : γ = aABe, S-> aABe; Handle = aABe

注意-句柄在右句形式中带有下划线。

是否总是处理最左边的子字符串?

不,总是选择最左边的子字符串作为句柄,可能不会给出正确的 SR(Shift-Reduce) Parsing。

处理修剪:

从解析树中删除左侧非终端的孩子称为Handle Pruning

可以通过句柄修剪获得最右边的反向推导。

要遵循的步骤:

  • 从要解析的字符串终端“w”开始。
  • 令 w = γ n ,其中 γ n是未知 RMD 的第 n 个右序列形式。
  • 要反向重建 RMD,请将句柄 βn 定位在 γ n中。用一些 A n ⇢ βn 的 LHS 替换 βn 以获得 (n-1) th RSF γ n-1。重复。

示例 1:

Right Sequential FormHandleReducing Production
id + id * ididE ⇒ id
E + id * ididE ⇒ id
E + E * ididE ⇒ id
E + E * EE + EE ⇒ E + E
E * EE * EE ⇒ E * E
E (Root)  

示例 2:

Right Sequential FormHandleProduction
id + id + ididE ⇒ id
E + id + ididE ⇒ id
E + E + ididE ⇒ id
E + E + EE + EE ⇒ E + E
E + EE + EE ⇒ E + E
E (Root)