Я сказал "живой код", потому что я имею в виду не из текстовых исходных файлов или исходных строк, а из partialFunctions/lambdas. (Я знаю, что Ruby1.8 parseTree и С# linq могут это сделать)
рассмотрим partialFunction f:
val f = (i: Int, j: Int) => (i + j) * 2
Надеюсь, что какой-то инструмент работает следующим образом:
getBodyAstFrom(f) //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
Мне все равно, что семантические вещи (синтаксический анализ контекста и implicits слишком сложны и ненужны для меня), мне просто нужно синтаксическое дерево из живого кода, возможно ли это?
Могут возникнуть проблемы с проверкой кода других пользователей, но как насчет моего собственного кода? Возможны ли следующие действия?
val f = AstFunction(i: Int, j: Int){(i + j) * 2}
f(5, 6) //=> 22
f.ast //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
Кажется, нужно немного взломать компилятор, хмммм...