中置演算子の左連想ツリーを構築するための構文をマスターしました。
term * (
"+" ^^^ { (a:Expr, b:Expr) => new FunctionCall(plus, a::b::Nil) } |
"-" ^^^ { (a:Expr, b:Expr) => new FunctionCall(minus, a::b::Nil) } )
告白しなければなりませんが、それがどのように機能するかを完全には理解していません。私が今やりたいことは、次のような構文に対して同様の効果を達成することです
a[b](c)(d)[e]
として解析する必要があります
sub(call(call(sub(a, b), c), d), e)
高レベルの "^^^" マジックを拡張して、純粋な中置演算子ではない場合をカバーできますか? それとも、ある種の左折ロジックを自分で実装する必要がありますか? もしそうなら、それがどのように見えるかについてのヒントはありますか?