12
我说“实时代码”,因为我的意思不是来自文本源文件或源字符串,而是来自partialFunctions/lambda。 (我知道ruby1.8的的分析树和C#LINQ可以做到这一点)我可以从实时scala代码获取AST吗?
考虑partialFunction 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'))
这似乎需要一些黑客到编译器,hmmmm ...