Можно ли экспортировать компилятор DSL, созданный JetBrains MPS, и использовать его независимо (например, вызвать его из другой программы Java) - PullRequest
1 голос
/ 16 апреля 2020

Я хотел бы создать DSL и использовать его следующим образом:

  • DSL компилируется в Java.
  • Экспортирует компилятор DSL и упаковывает его (т.е. как JAR), поэтому я могу вызвать DSL-компилятор из приложения Java для компиляции «кода, написанного на моем DSL» в «Java исходный код» (я буду использовать другие библиотеки для программной компиляции Java в байт-код) .

Можно ли использовать JetBrains MPS для создания DSL и экспорта его компилятора, как описано? Если нет, другие предложения приветствуются?

Ответы [ 3 ]

1 голос
/ 19 апреля 2020

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

Хотя вы можете использовать ant для вызова «генератора кода MPS» (который отвечает за генерацию кода целевого языка) Например, Java, представляющий входную программу DSP), но генератор ожидает в качестве входных данных «модель MPS» вашей программы DSL (я полагаю, это некоторое AST, подобное внутреннему представлению MPS программы DSL). Но единственный способ создать «модель MPS» вашей DSL-программы - использовать IDE Jetbrains (или ее сокращенную версию, или intellij с плагином для вашей DSL). Другими словами, единственный способ писать / редактировать программы в вашем DSL и иметь возможность их компилировать, это использовать Jetbrains MPS IDE (или одно из его производных) .

Ссылка на вопрос, который я разместил на форуме поддержки MPS, и ответ.

0 голосов
/ 03 мая 2020

Возможно, вы не можете сделать это напрямую как jar-библиотеку, но возможно, с некоторыми муравьями ant или gradle c, вызвать DSL-компилятор (или, как его называют в MPS, генератор) из задачи ant , Документация об этом может быть найдена в https://www.jetbrains.com/help/mps/building-mps-language-plugins.html# Я знаю, что это говорит о создании плагинов, но используется тот же механизм. Почему вы хотите сделать это, однако, ускользает от меня, поскольку сильной стороной MPS является поддержка IDE и очень продвинутая многоязычная интеграция, а не обязательно генерация кода.

0 голосов
/ 16 апреля 2020

Мне кажется, ваш вопрос не так далек от этой записи в документации: https://confluence.jetbrains.com/display/MPSD32/Building+standalone+IDEs+for+your+languages

...