LR解析器减少/减少(YACC等)

时间:2012-03-21 14:33:33

标签: parsing yacc lr

假设我有以下无上下文语法,按特定顺序(对于YACC):

  • z→x
  • z→z x

如果我有输入:

(z(z x

解析器会减少:

  1. 'x'到'z'
  2. 'z x'到'z'
  3. 我在想它2号,但我不太清楚为什么。非常感谢

    编辑:更改了输入以进行说明

1 个答案:

答案 0 :(得分:1)

你的语法是左关联的,因为它是左递归的。左关联意味着当输入从左向右扫描时,将贪婪地完成制作。通过扫描另一个z并缩小,您的z总是延长x

关于您的问题,您不能输入z z x,因为输入包含终端符号。据推测,x是一个终端符号(否则语法不完整)。 z显然是非终结的。

您可以考虑部分句型z z x。但是,这种形式不能通过这种语法生成。

z开始,接下来的步骤是生成x(从而完成)或生成z x。之后的下一个可能步骤是以两种方式之一替换z:生成x x(并完成)或生成z x x

如您所见,这些规则无法访问字符串z z x