這是我的自下而上的解析器的骨架:什麼時候減少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