我说“实时代码”是因为我的意思不是来自文本源文件或源字符串,而是来自 partialFunctions / lambdas。(我知道Ruby1.8的parseTree和C# linq可以做到)
考虑一个偏函数 f:
val f = (i: Int, j: Int) => (i + j) * 2
我希望有一些工具可以像这样工作:
getBodyAstFrom(f) //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
我不在乎语义的东西(上下文解析和隐式太复杂,对我来说没有必要),我只需要来自实时代码的语法树,有可能吗?
检查其他人的代码可能会出现问题,但我自己的代码呢?以下事情可能吗?
val f = AstFunction(i: Int, j: Int){(i + j) * 2}
f(5, 6) //=> 22
f.ast //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
似乎需要对编译器进行一些黑客攻击,嗯...