「ライブ コード」と言ったのは、テキスト ソース ファイルやソース文字列からではなく、partialFunctions / lambdas からという意味だからです。(Ruby1.8 の parseTree と C# linq でできることは知っています)
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'))
コンパイラへのハッキングが必要なようです、うーん...