XText: Как создать парсер для нескольких целевых языков
Я определил свой DSL в XText, и он автоматически генерирует Java-версию синтаксического анализатора языка и генерирует скелет генерации кода, что действительно здорово.
Проблема в том, что мой DSL предназначен для использования в проектах, которые реализуются на нескольких языках. Вы можете себе представить, что нам, возможно, потребуется проанализировать DSL в C#, Java и Ruby, по крайней мере.
Итак, вопрос: есть ли способ сгенерировать парсер для нескольких языков с помощью xtext?
1 ответ
Чисто разбираемый материал - только малая часть полного набора Xtext. Интеграция в Eclipse IDE и генератор Xtend - это два больших куска кода. А Xtext опирается на модель EMF Ecore. Ни одна из этих частей не доступна на других языках.
Так что запуск Xtext из простого C# и Ruby невозможен.
Что ты можешь сделать:
Вы можете упаковать анализатор и генератор в отдельный jar-файл и вызывать его как внешний процесс из любого места (в том числе из C# и Ruby). Это было бы как
javac
для вас собственный DSL.Вы можете запустить свой Ruby-код в JRuby и вызывать Xtext оттуда. Поскольку все работает в одной и той же JVM, у вас будет лучший контроль, чем при запуске внешней программы.
Вы можете использовать Xtext для того, чтобы получить удобный редактор со всеми интересными вещами, но реализовать независимую грамматику для любого языка, который вы хотите.