我已经掌握了为中缀运算符构建左关联树的语法:
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)
可以扩展高级“^^^”魔术以涵盖它不是纯中缀运算符的情况吗?还是我必须自己实现某种左折叠逻辑?如果是这样,关于它可能是什么样子的任何提示?