Насколько мне известно, редакторы DSL используют два подхода:
1- Подход на основе синтаксического анализатора для разработки текстовых DSL: пользователь указывает грамматику, и инструментальные средства генерируют синтаксический анализатор, распознающий эту грамматику. Парсер строит абстрактное синтаксическое дерево, которое используется генераторами кода и т. Д.
2- Проекционный подход: здесь нет парсера. Абстрактное синтаксическое дерево напрямую редактируется с помощью жестов пользователя, а правила проецирования определяют способ визуализации абстрактного синтаксического дерева. Это позволяет использовать разные обозначения (текстовые, графические, табличные ...) одновременно.
Теперь, когда я смотрю только на графические рабочие среды DSL (такие как DSL-инструменты от Microsoft), мне интересно, какой подход они используют и какие шаги необходимы для определения DSL. Если это проекционный подход, то почему он ограничен только графическими обозначениями?
Я считаю, что он использует оба. Проекционный подход, позволяющий сделать нотацию графической, но модели сохраняются в определенном формате (например, XML) и анализируются.
Спасибо.