假设我有以下上下文无关文法,在那个特定的顺序(YACC):LR分析器降低/减少(YACC等)
- Ž→X
- Ž→ZX
如果我有一个输入:
(Z(ZX
将解析器减少:
- 'X' 到 'Z'
- 'Z X' 到 'Z'
我想到的是它的2号,但我不明白为什么。非常感谢
编辑:改变输入澄清
假设我有以下上下文无关文法,在那个特定的顺序(YACC):LR分析器降低/减少(YACC等)
如果我有一个输入:
(Z(ZX
将解析器减少:
我想到的是它的2号,但我不明白为什么。非常感谢
编辑:改变输入澄清
你的语法是向左结合的,因为它是左递归。左联合意味着当输入从左到右扫描时,产品将会贪婪地完成。你总是有一个z
,它通过扫描另一个x
并减少,延长到更长的z
。
关于你的问题,你不能有一个输入z z x
,因为输入由终端符号组成。据推测,x
是一个终端符号(否则语法不完整)。 z
显然是非终结符。
你可以考虑部分句子形式z z x
。然而,这种形式不能由这个语法产生。
从z
开始,您的下一步是生成x
(并因此完成)或生成z x
。接下来可能的步骤是用以下两种方法之一替换z
:生成x x
(并完成)或生成z x x
。
正如您所见,这些规则无法访问字符串z z x
。
如果你有'z z x'的输入,你的解析器会反对z是一个未知符号(因为它是一个规则,而不是一个标记)。 – 2012-03-21 21:46:10