我应该使用什么生产规则来减少自下而上的解析?
What production rule should I use to reduce in bottom-up parsing?
至此,我对bottom-up解析算法的理解是这样的
- shift a token into the stack
- check the stack from top if some elements including the top can be reduced by some production rule
- if the elements can be reduced, pop and push the left hand side of the production rule.
- 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
?
如果我在学习中遗漏了一些东西,我很抱歉。
这是一个很好的问题,将在您课程的下一部分中解决。
现在,假装有一些神奇的黑盒子告诉解析器什么时候应该减少(以及,有时,使用几种可能的产生式中的哪一种)就足够了。
各种解析算法解释了这个黑盒的构造。请注意,一种可能的解决方案是分叉现实并同时尝试两种操作,但更常见的解决方案是处理语法以找出如何预测正确的操作。
至此,我对bottom-up解析算法的理解是这样的
- shift a token into the stack
- check the stack from top if some elements including the top can be reduced by some production rule
- if the elements can be reduced, pop and push the left hand side of the production rule.
- 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
?
如果我在学习中遗漏了一些东西,我很抱歉。
这是一个很好的问题,将在您课程的下一部分中解决。
现在,假装有一些神奇的黑盒子告诉解析器什么时候应该减少(以及,有时,使用几种可能的产生式中的哪一种)就足够了。
各种解析算法解释了这个黑盒的构造。请注意,一种可能的解决方案是分叉现实并同时尝试两种操作,但更常见的解决方案是处理语法以找出如何预测正确的操作。