到目前为止,我对自底向上解析的算法的理解是这样的。
- 将令牌移入堆栈
- 如果某些元素(包括顶部)可以通过某些生产规则减少,则从顶部检查堆栈
- 如果元素可以减少,弹出并推动生产规则的左侧。
- 继续这些步骤,直到顶部是开始符号,下一个输入是 EOF
所以用一个示例语法来支持我的问题,
S → aABe
A → Abc
A → b
B → d
如果我们输入字符串为
缩写$
我们将a
在堆栈中移动,因为没有减少的生产规则a
,我们移动下一个令牌b
。然后我们可以找到一个生产规则A → b
并减少b
到A
。
那么我的问题是这个。我们aA
在堆栈上,下一个输入是b
. 那么解析器如何判断我们是否归约b
到A
我们等待c
来使用的规则A → Abc
呢?
当然,减少b
到A
那个点会导致错误。但是解析器是如何知道我们应该等待的c
呢?
如果我在学习时遗漏了什么,我很抱歉。