Что я могу делать с языками DSL, созданными в JetBrains MPS? - PullRequest
0 голосов
/ 11 июля 2020

Я только начал пару часов go читать о моделировании DSL.

Но прямо сейчас я привязан к использованию JetBrains MPS IDE или ее плагина для JetBrains Intellij Idea и я Хотел бы знать, как я могу экспортировать эти модели DSL во что-то доступное для использования, например, для консольных приложений или чего-то еще (если это возможно или имеет смысл).

Ответы [ 2 ]

0 голосов
/ 14 августа 2020

Вы можете сделать несколько вещей уже в MPS без экспорта моделей:

  • Анализировать модели на предмет ошибок, нарушений бизнес-правил или несоответствий.
  • Интерпретировать модели, а затем отобразить результат интерпретации в MPS напрямую. Полезно, если вы реализуете спецификацию и пример / тест этой спецификации, затем вы можете запускать тесты в MPS и, например, отображать результаты в виде зеленого / красного выделения.
  • Определите генератор для перевода модели в текст (исполняемый код или ввод для такого инструмента, как Liquibase, для создания схем баз данных, например).

Если вы хотите экспортировать данные из MPS для использования в другом приложении, есть два подхода: рекомендовал бы:

  1. Самый простой способ: NodeSerializer из MPS-расширений. У меня есть более подробная информация о том, как его использовать, в сообщении блога . Это позволяет вам быстро экспортировать данные в довольно приятную структуру XML.
  2. Самый гибкий подход: написать собственный модуль экспорта с использованием MPS Open API для рекурсивного обхода дерева узлов. Вы можете выводить любой формат, который хотите (XML, JSON, YAML, et c.) И настраивать вывод по своему усмотрению.

Вот еще два подхода, которыми вы могли бы быть учитывая, но я бы НЕ рекомендовал:

  1. Доступ к файлам модели (*.mps) напрямую. Хотя они уже имеют формат XML, их структура адаптирована к потребностям MPS. Он нормализован, что означает, что данная часть информации обычно сохраняется только один раз, а также кодирует идентификаторы узлов определенным образом для экономии места. Формат также недокументирован и может измениться в будущем (хотя он не менялся в течение последних нескольких лет).

  2. Использование генератора MPS для преобразования вашего DSL в встроенный MPS. на XML языке, jetbrains.mps.core.xml. Я не рекомендую использовать генератор MPS, потому что оптимальное место генератора - это перевод между двумя разными языками MPS, например, с вашего пользовательского DSL на Java. Если вы попытаетесь написать правила генератора для преобразования чего-либо в XML, вы столкнетесь с несколькими проблемами, которые можно решить, но которые совершенно не нужны.

0 голосов
/ 13 августа 2020

Вы можете определить генератор, который преобразует предложение (файл, AST) вашего языка в другой язык MPS. Целевой язык сначала должен существовать в MPS.

В качестве альтернативы вы можете сгенерировать текст с аспектом TextGen, но это больше подходит для простой печати текстового представления вашего языка. Если вам нужно что-то более сложное (например, создание текстового кода на другом языке), вы можете использовать plaintextgen language из MPS-extension или mbeddr.platform .

Если вы хотите ввести (импортировать) текстовую программу в MPS , вы можете закодировать обработчик вставки , куда вы можете поместить свой синтаксический анализатор, или вы можете изменить формат в котором хранится AST (от XML до, возможно, непосредственно вашего языка, но для этого снова потребуется синтаксический анализатор для чтения) с настраиваемым постоянством .

В настоящее время я работаю над решение , которое позволяет импортировать язык MPS из модели YAJCo (основанный на модели генератор синтаксического анализатора, где входными данными является не грамматика, а классы Java, представляющие модель semanti c ). Затем вы можете импортировать предложение (файл), которое создает и заполняет модель (AST). Из программы в MPS вы можете сгенерировать исходный код Java, который заполняет исходные классы Java. Итак, если вам нужен текстовый язык MPS и вы используете IDE, но затем экспортируете AST в Java объекты, которые вы можете использовать, возможно, YtM для вас.

...