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 ...