到目前为止,我对自底向上解析的算法的理解是这样的。
- 将令牌移入堆栈
- 如果某些元素(包括顶部)可以通过某些生产规则减少,则从顶部检查堆栈
- 如果元素可以减少,弹出并推动生产规则的左侧。
- 继续这些步骤,直到顶部是开始符号,下一个输入是 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呢?
如果我在学习时遗漏了什么,我很抱歉。