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

What production rule should I use to reduce in bottom-up parsing?

至此,我对bottom-up解析算法的理解是这样的

  1. shift a token into the stack
  2. check the stack from top if some elements including the top can be reduced by some production rule
  3. if the elements can be reduced, pop and push the left hand side of the production rule.
  4. continue those steps until top is the start symbol and next input is 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?

如果我在学习中遗漏了一些东西,我很抱歉。

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

现在,假装有一些神奇的黑盒子告诉解析器什么时候应该减少(以及,有时,使用几种可能的产生式中的哪一种)就足够了。

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