DSL с простым синтаксисом может означать или не означать простую семантику.
Простая семантика может означать или не означать простой перевод на целевой язык;такие переводы «технически просты», только если DSL и целевой язык имеют много общих типов данных и моделей исполнения.(Системы ограничений имеют простую семантику, но перевести их на Фортран действительно сложно!).(Вы должны задаться вопросом: если перевод вашего DSL прост, зачем он у вас есть?)
Если вы хотите создать DSL (в вашем случае вы предпочитаете легкий, потому что учитесь), вам нужен компилятор DSLинфраструктура, в которой есть все, что вам нужно, включая поддержку сложных переводов.«То, что необходимо» для выполнения перевода всех DSL на все возможные целевые языки, безусловно, является невероятно большим набором механизмов.
Однако есть много очевидного, что может оказаться полезным:
- Сильный механизм синтаксического анализа (кто хочет поиграться с грамматиками, структура которых вызвана слабостью механизма синтаксического анализа? (Если вы не знаете, что это такое, прочитайте, например, грамматику LL (1)).
- Автоматическое построение представления (например, абстрактного синтаксического дерева) проанализированного DSL
- Возможность доступа / изменения / построения новых AST
- Возможность сбора информации о символах иих значение (таблицы символов)
- Способность строить анализы AST для DSL, поддерживать переводы, для которых требуется информация из «далеко» в дереве, влиять на перевод в определенной точке дерева
- Способность легко реорганизовать AST для достижения локальной оптимизации
- Способность строить / анализ cинформация о контроле и потоке данных, если DSL имеет некоторые процедурные аспекты, а генерация кода требует глубоких рассуждений или оптимизации
Большинство инструментов, доступных для «создания DSL-генераторов», предоставляют некоторый вид синтаксического анализа, возможно, построения дерева, а затем оставить вас, чтобы заполнить все остальное.Это дает вам возможность иметь небольшой чистый DSL, но для его реализации требуется вечность.Это не хорошо.Вы действительно хотите всю эту инфраструктуру.
В нашем DMS Software Reengineering Toolkit есть вся инфраструктура, описанная выше и многое другое.(Это явно не, и не может иметь луну).Вы можете увидеть полный, "все-в-одном-", "1029 * простой пример DSL", который использует некоторые неинтересные части этого механизма .