Ho detto "codice live" perché non intendo dai file di origine del testo o dalle stringhe di origine, ma da partialFunctions/lambdas. (So di Ruby1.8 ParseTree e C# LINQ può farlo)Posso ottenere AST dal codice scala live?
Consideriamo una funzione parziale f:
val f = (i: Int, j: Int) => (i + j) * 2
spero che ci sia qualche strumento funziona così:
getBodyAstFrom(f) //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
I don' t attenzione alle cose semantiche (l'analisi del contesto e gli impliciti sono troppo complessi e inutili per me), ho solo bisogno dell'albero della sintassi dal codice live, è possibile?
Potrebbero esserci problemi con l'ispezione del codice di altre persone, ma per quanto riguarda il mio codice personale? Sono le seguenti cose possibili?
val f = AstFunction(i: Int, j: Int){(i + j) * 2}
f(5, 6) //=> 22
f.ast //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
sembra bisogno di hacking in compilatore, Mmmmm ...