我应该使用什么生产规则来减少自下而上的解析?

问题描述 投票:0回答:1

到目前为止,我对自下而上解析算法的理解是这样的。

  1. 将令牌转移到堆栈中
  2. 如果某些生成规则可以减少包括顶部在内的某些元素,则从顶部检查堆栈
  3. 如果可以减少元素,则弹出并按下生产规则的左侧。
  4. 继续这些步骤,直到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

如果我在学习期间错过了什么,我很抱歉。

parsing programming-languages bottom-up
1个回答
1
投票

这是一个很好的问题,将在课程的下一部分中解决。

现在,假装有一个神奇的黑盒子告诉解析器何时应该减少(并且有时候,使用哪些可能的产品)就足够了。

各种解析算法解释了这个黑盒子的构造。请注意,一种可能的解决方案是分叉现实并同时尝试这两种操作,但更常见的解决方案是处理语法以便找出如何预测正确的操作。

© www.soinside.com 2019 - 2024. All rights reserved.