这是我的自下而上解析器的骨架:
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
?
自下而上的解析对我来说是相当新的,所以任何帮助表示赞赏。