到目前为止,我对自下而上解析算法的理解是这样的。
- 将令牌转移到堆栈中
- 如果某些生成规则可以减少包括顶部在内的某些元素,则从顶部检查堆栈
- 如果可以减少元素,则弹出并按下生产规则的左侧。
- 继续这些步骤,直到top是开始符号,下一个输入是EOF
所以用示例语法支持我的问题,
S→aABe
A→Abc A→b B→d
如果我们输入字符串为
abbcde $
我们将在堆栈中移动a
,因为没有减少a
的生产规则,我们移动下一个令牌b
。然后我们可以找到生产规则A → b
并将b
减少到A
。
那我的问题是这个。我们在堆栈上有aA
,下一个输入是b
。然后解析器如何确定我们是否将b
减少到A
我们等待c
来使用规则A → Abc
?
当然,在那时将b
减少到A
会导致错误。但是,解析器如何知道我们应该等待c
?
如果我在学习期间错过了什么,我很抱歉。
这是一个很好的问题,将在课程的下一部分中解决。
现在,假装有一个神奇的黑盒子告诉解析器何时应该减少(并且有时候,使用哪些可能的产品)就足够了。
各种解析算法解释了这个黑盒子的构造。请注意,一种可能的解决方案是分叉现实并同时尝试这两种操作,但更常见的解决方案是处理语法以便找出如何预测正确的操作。