Что вам действительно нужно, так это система преобразования программ , которая отображает синтаксические структуры на одном языке (ваш DSL) в синтаксические шаблоны в других языках. Такой инструмент может выполнять произвольные преобразования (переписывание дерева обобщает перезапись строки, которые являются почтовыми системами, полностью поддерживающими Turing) во время проекта генерации кода, что означает, что то, что вы генерируете и насколько сложен ваш процесс генерации, определяется только вашими амбициями , а не свойствами "рамки генератора кода".
Сложные системы преобразования программ сочетают в себе различные типы областей видимости, анализа потока и / или пользовательских анализаторов для обеспечения преобразований. Это не добавляет никакой теоретической силы, но добавляет много практической силы: большинство реальных языков (даже DSL) имеют пространства имен, управление и поток данных, необходимость определения типа и т. Д. И т. Д.
Наш инструментарий реинжиниринга программного обеспечения DMS - это система преобразования этого типа. Он использовался для анализа / преобразования как обычных языков, так и DSL, для простых и сложных языков, а также для небольших, больших и даже огромных программных систем.
Относится к комментариям OP о «превращении AST в другие языки», что достигается DMS путем написания преобразований, которые отображают поверхностный синтаксис для DSL (реализованный за кулисами AST его DSL) в поверхностный синтаксис для целевой язык (реализован с использованием AST целевого языка). Полученный целевой языковой AST затем автоматически печатается DMS для предоставления фактического исходного кода на целевом языке, который соответствует целевому AST.