私は単純な式パーサーに取り組んでいますが、以下のパーサー コンビネーター宣言を考えると、テストに合格できないようで、正しい連想ツリーがポップアップし続けます。
def EXPR:Parser[E] = FACTOR ~ rep(SUM|MINUS) ^^ {case a~b => (a /: b)((acc,f) => f(acc))}
def SUM:Parser[E => E] = "+" ~ EXPR ^^ {case "+" ~ b => Sum(_, b)}
def MINUS:Parser[E => E] = "-" ~ EXPR ^^ {case "-" ~ b => Diff(_, b)}
私はこれのために何時間もデバッグしてきました。誰かがそれが正しく出ていないことを理解するのを手伝ってくれることを願っています.
"5-4-3" は、予想される -2 ではなく 4 に評価されるツリーを生成します。
上記の文法のどこが間違っていますか?