Какой инструмент предоставляет самый простой способ создать текстовый внешний DSL для простого перевода кода?

#dsl #workbench #code-translation

#dsl #workbench #code-translation

Вопрос:

В моем приложении мне нужно ввести некоторый код для определенного домена, и я хотел бы создать DSL для этого. DSL просто должен содержать несколько действительно базовых команд.

Пример кода DSL:

 srccode{
    code: "if("
    func: insertInputData(1)
    code: "){n    "
    func: insertOutputData(0)
    code: "n}n"
    cond: checkForOutputConnection(1):
        code: "else{n    "
        func: insertOutputData(1)
        code: "n}n"
}
  

Этот код должен быть переведен в исходный код языка общего назначения (например. Python) вот так:

 def getSrcCode():
    s = ""
    s  = "if("
    s  = insertInputData(1)
    s  = "){n    "
    s  = insertOutputData(0)
    s  = "n}n"
    if(outputConnected(1)):
        s  = "else{n    "
        s  = insertOutputData(1)
        s  = "n}n"
    return s
  

Так что на самом деле это всего лишь простой перевод.

  • Xtext, похоже, становится довольно сложным не позже, чем при попытке интегрировать его в другие (не java) приложения, и, похоже, он привязан к Java.
  • JetBrains MPS, безусловно, является чем-то совершенно потрясающим, но я не хочу проекционный редактор, просто чистый текст

(это может быть неправильно, я пока не использовал ни один из них)

Какой верстак или инструмент вы бы порекомендовали мне использовать, чтобы получить возможность легко переводить код на другие языки, как показано (я предпочитаю что-то, что как-то довольно ограничено, но легко в освоении и использовании, соответствует моим низким потребностям).

Комментарии:

1. Вы смотрели на dbader.org/blog/writing-a-dsl-with-python ?

2. пока нет, я посмотрю, спасибо!

3. Я определенно склоняюсь к xtext. Вы можете создавать генераторы в xtext для генерации любого кода, который вы хотите, на основе AST, который анализируется из вашего текста. Это означает, что вы будете программировать на чем-то вроде Java или Xtend (отличный язык, который упрощает Java, но компилируется на Java)

4. для конкретного python вы могли бы рассмотреть github.com/textX/textX также

Ответ №1:

Это правда, что вы не можете избавиться от редактора проектов в MPS, но при хорошем дизайне DSL вы можете ограничить конечного пользователя и контролировать их поток.

Если вы решите воспользоваться редактором проектов, этот плагин вам понадобитсяhttp://dslfoundry.com/first-prototype-of-plaintextflow-released

Приветствия!