#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
Приветствия!