А я тут пилю свой пайплайн для компиляции. Может кому-то будет интересно.
Идея в том, что у меня есть чудесный формат для описания AST - простой, наглядный, гибкий и шустрый. Он берёт на себя вопрос с трансформациями и отслеживанием какая часть исходника соответствует какой части результата - об этом голова вообще не болит. Исходный код пишется либо сразу на языке на базе этого формата (xml.tree, js.tree, wasm.tree, ...), либо первым же шагом в такой язык парсится (MarkedText -> marked.tree, JSON -> json.tree, ...).
Получив AST, далее гоняем по нему трансформации: транспиляции в AST других языков, валидации, оптимизации и тд.
Наконец, применяем один из стандартных сериализаторов и получаем либо строку с кодом + сорсмапы, либо бинарник + DWARF.
Про сам формат я подробно рассказывал тут:
https://github.com/nin-jin/slides/tree/master/treeВ песочнице можно поиграться с несколькими языками и трансформациями:
https://tree.hyoo.ru/Описания языков:
https://github.com/nin-jin/tree.d/wiki/Tree-based-languages