Я сказал «живой код», потому что я имею в виду не исходные текстовые файлы или исходные строки, а частичные функции / лямбды. (Я знаю, что Ruby1.8 parseTree и C # linq могут это сделать)
рассмотрим частичную функцию 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'))
Кажется, нужно взломать компилятор, хмммм ...