Это очень широкая тема, поэтому она заслуживает очень широкого ответа.
Движком, разработанным для произвольной обработки и генерации кода, является DMS Software Reengineering Toolkit . DMS анализирует широкий спектр языков, принимает определения большего количества языков (включая языки спецификаций или моделирования), обеспечивает сопоставление и преобразование шаблонов с использованием декларативных шаблонов, написанных с использованием синтаксиса исходного уровня и т. Д.
DMS не единственный язык; скорее это набор доменных языков (DSL), каждый из которых обеспечивает поддержку одной из проблем, которые должен решать инструмент метапрограммирования кода: грамматики языка, вычисления атрибутов, сопоставление / преобразование шаблонов, анализ потока, анализ сценариев задач.
DMS чрезвычайно мощный; он использовался для создания многих инструментов анализа, генерации и преобразования кода (вы можете увидеть множество примеров на веб-сайте, предлагаемом как инструменты COTS). Это не обязательно просто , потому что анализ / преобразование кода для реальных языков, таких как Java, C # и C ++, является сложным, потому что эти языки сложны, и потому что фундаментальная проблема преобразования кода с одного уровня абстракции в другой, и получение оптимизированных результатов принципиально сложно. Я утверждаю, что DMS настолько прост, насколько это практически возможно для поставленной задачи.
(Полное раскрытие: я являюсь руководителем DMS).