Какой подход используют графические верстаки DSL: парсеры или проекции?

Насколько мне известно, редакторы DSL используют два подхода:

1- Подход на основе синтаксического анализатора для разработки текстовых DSL: пользователь указывает грамматику, и инструментальные средства генерируют синтаксический анализатор, распознающий эту грамматику. Парсер строит абстрактное синтаксическое дерево, которое используется генераторами кода и т. Д.

2- Проекционный подход: здесь нет парсера. Абстрактное синтаксическое дерево напрямую редактируется с помощью жестов пользователя, а правила проецирования определяют способ визуализации абстрактного синтаксического дерева. Это позволяет использовать разные обозначения (текстовые, графические, табличные ...) одновременно.

Теперь, когда я смотрю только на графические рабочие среды DSL (такие как DSL-инструменты от Microsoft), мне интересно, какой подход они используют и какие шаги необходимы для определения DSL. Если это проекционный подход, то почему он ограничен только графическими обозначениями?

Я считаю, что он использует оба. Проекционный подход, позволяющий сделать нотацию графической, но модели сохраняются в определенном формате (например, XML) и анализируются.

Спасибо.


person Abdelhakim    schedule 28.10.2019    source источник
comment
›Если это проекционный подход, то почему он ограничен только графическими обозначениями? Замечательное замечание! Некоторые подходы к моделированию, которые вынуждают вас использовать (например, создавать DSL), используя только графическую нотацию, часто насилуют концепции. Если табличные, символьные или текстовые обозначения больше подходят для конкретной вещи, принудительное использование диаграммы контрпродуктивно и противоречит здравому смыслу.   -  person Hawk    schedule 13.08.2020


Ответы (2)


Ну, собственно говоря, любой «графический» редактор является проекционным. Возможность языковой рабочей среды иметь разные нотации, как в MPS, обеспечивается тем фактом, что в инструмент встроены эти нотации, а также возможность определять несколько редакторов для одной и той же части модели. В случае MPS можно даже создавать новые обозначения в виде плагина (без изменения самого MPS).

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

Кроме того, я бы не согласился называть DSL-инструменты языковыми инструментами. Как вы можете прочитать в https://homepages.cwi.nl/~storm/publications/lwc13paper.pdf программа должна удовлетворять ряду критериев (по моему мнению, больше, чем могут соответствовать DSL-инструменты), чтобы быть языковым инструментом.

В общем, я бы сказал, что любая «графическая» языковая рабочая среда (то есть языковая рабочая среда, которая создает редакторы, не являющиеся обычным текстом) использует проекционный подход.

person Eugen Schindler    schedule 29.10.2019
comment
`сохранение моделей [..] не может быть ничем иным, кроме текстового или двоичного` Это технически правильно, но с той же логикой вы можете сказать, что файлов нет, потому что это просто потоки байтов или единиц и нулей на HDD. - person Hawk; 13.08.2020
comment
Суть проекционных редакторов в том, что это не тот же текст, который хранится и отображается. Программа на Java хранится в виде неразборчивого XML, а не в виде кода Java. С другой стороны, все IDE пост-IntelliJ создают AST за кулисами для обеспечения интеллектуальных действий, выделения и т. Д. Разница в том, что текстовые IDE должны использовать синтаксический анализатор того конкретного языка, который вы редактируете, недостаточно иметь XML. парсер для всего. - person Hawk; 13.08.2020

Важным различием между исходной и проекционной средой редактирования является разделение между постоянным хранением и редактированием. Системы проекционного редактирования могут выбирать любой механизм сохранения, который они выбирают, в то время как исходные системы должны иметь какой-то универсальный механизм хранения, поэтому они почти всегда являются текстовыми файлами Мартин Фаулер

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

пример: Markdown на этом веб-сайте

Примером широко используемого инструмента, который технически (вы бы так не подумали) использует проекционный редактор, может быть MS Word, потому что вы не можете просто быстро открыть файл .docx в блокноте и изменить размер заголовка. . Вы всегда редактируете абстрактное представление, показанное вам через проекцию.

Системы обработки текста WYSIWYG, такие как Word, которые, кажется, редактируют форматированный текст напрямую, по сути, являются редакторами структуры для основного размеченного текста. [википедия]


Непосредственно связанный термин - Иллюстративное программирование [Фаулер], который включает так называемый самый распространенный язык программирования в мире Excel.

person Hawk    schedule 13.08.2020
comment
Но в случае с этим веб-сайтом вы не можете редактировать представление визуализации. Единственное доступное для редактирования представление - это представление хранилища, которое является источником Markdown. Поэтому я не понимаю, в чем заключается проекция в использовании слова Фаулером: визуализация - это не проекция AIUI. - person rici; 14.08.2020
comment
Спасибо, вы правы, Markdown здесь не является проекционным редактированием, потому что вы редактируете представление хранилища напрямую. С другой стороны, я думаю, что редактор форматированного текста будет использовать проекционное редактирование. - person Hawk; 14.08.2020
comment
Да, я думаю, вы правы насчет редакторов форматированного текста. - person rici; 14.08.2020