这是我的自下而上的解析器的骨架:什么时候减少shift-reduce分析器?
while (!stack.empty())
{
if (!reduce())
{
shift();
}
}
而且我有以下规则:
Program -> Expr
Expr -> Expr '+' Expr
Expr -> Number
Number -> FLOAT | INTEGER // These 2 are terminal symbols
如果我有以下输入:
2 + 3
2被推开到堆栈中,然后减少到一个数字,然后是一个表达式,然后是一个程序。所以它没有任何机会解析整个加法。我如何强制解析器解析其余的呢?我应该这样做:
Program -> Expr EOF
?
自下而上的解析对我来说是非常新的,所以任何帮助表示赞赏。
BTW:[here](http://stackoverflow.com/q/2626723/859279)是一个类似的问题 – Apanatshka