Допустим есть фрагмент кода в виде какого то объекта (в виде AST) - какие есть возможности для его анализа и преобразования? Первое что в голову приходит, это макро подстановка - меняем любой индентификатор на другой фрагмент кода, получаем новый фрагмент. Это просто, но возможности такого преобразования ограничены.
Другая крайность - причесываем AST рекурсивно какой нибудь функцией, функция принимает узел AST, и возвращает eго замену. Так можно делать что угодно, но слишком брутально иногда выходит.
Как еще можно извращаться?:-)