Разработка текстового предметно-ориентированного языка (DSL) с помощью Microsoft Visual Studio - PullRequest
9 голосов
/ 16 февраля 2011

Я провел несколько поисков по разработке DSL в visual studio.Сначала я обнаружил, что есть пакет SDK для визуализации и моделирования для VS2010.У этого есть инструмент, названный инструментом DSL.Но, похоже, это только для графической разработки DSL.

Затем я увидел несколько постов о том, что «Осло» - это инструмент для разработки текстовой DSL, который «был» продуктом Microsoft - Microsoft больше не поддерживает этот инструмент.http://blogs.msdn.com/b/modelcitizen/archive/2010/09/22/update-on-sql-server-modeling-ctp-repository-modeling-services-quot-quadrant-quot-and-quot-m-quot.aspx

Поэтому я хотел бы знать, если я хочу разработать текстовый DSL, какой инструмент является лучшим?Что вы думаете, если я реализую DSL-парсер, использующий F # powerpack с FSLex и FSYacc?

Ответы [ 6 ]

7 голосов
/ 17 февраля 2011

В настоящее время я разрабатываю несколько внешних текстовых DSL с использованием FsLex / FsYacc.Я использовал ручной синтаксический анализатор, но я считаю, что FsLex / FsYacc гораздо проще поддерживать на этапе проектирования.

FsLex / FsYacc не так сложны, как ANTLR, но, поскольку большинство DSL довольно просты , FsLex / FsYacc - идеальный выбор для использования в Visual Studio.И держать DSL простыми - это хорошо, так как они предназначены для ограничения и просты в изучении.

Я считаю книгу Мартина Фаулера хорошим ресурсом, не столько для примеров и подробностей, сколько для энциклопедии DSL.идеи.Его обсуждение удобства использования и других аспектов проектирования DSL также стоит прочитать.Как указал Тоумас, он не охватывает ни F #, ни функциональные языки.Г-н Фаулер пишет, что ему не хватало опыта в этих вопросах, чтобы своевременно выводить книгу на рынок.

Высоко оценивая FsLex / FsYacc, я все еще хотел бы, чтобы кто-нибудь написал хороший бэкэнд для ANTLR для F #.:)

-Neil

6 голосов
/ 16 февраля 2011

Я фанат встроенных DSL, а-ля

http://lorgonblog.wordpress.com/2010/04/15/using-vs2010-to-edit-f-source-code-and-a-little-logo-edsl/

http://lorgonblog.wordpress.com/2010/04/16/fun-with-turtle-graphics-in-f/

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

Но да, для внешних DSL вам просто нужна цепочка инструментов грамматики / синтаксического анализатора / etc, и либо FsLex / FsYacc, либо, возможно, ANTLR или FParsec - это различные варианты. (У меня нет достаточного опыта с любым из них, чтобы знать компромиссы между ними.)

2 голосов
/ 06 апреля 2011

С тех пор как я сделал свой предыдущий пост, я также купил и прочитал части книги Теренса Парра «Шаблоны языковой реализации». Это превосходно, хотя и немного более технически, чем книга Мартина Фаулера (с некоторыми дополнительными материалами это может«Книга Дракона» для нового тысячелетия).Примеры основаны на Java и ANTLR, но главное - текст, поэтому книга полезна независимо от среды разработки языка.

Интересно, что между двумя книгами мало общего.Книга Мартина Фаулера хорошо освещает проектирование и реализацию базовых DSL, таких как те, которые используются для спецификации и конфигурации, в то время как книга Теренса Парра носит более технический характер и охватывает область, расширяющуюся вплоть до более сложных языков и байт-кода.машины.Я рекомендую оба варианта, если вы можете выделить для них бюджет, в противном случае любой из них является отличным выбором в рамках данного домена.

1 голос
/ 16 февраля 2011

У Мартина Фаулера есть новая книга о DSL: s.К сожалению, не будет много обсуждаться ни об инструментах Microsoft, ни о функциональных языках.

Microsoft больше не поддерживает графический инструмент "Quadrant", но MGrammar все еще поддерживается и интегрируется в SQL-сервер, верно?MGrammar - это «язык создания DSL».

Тем не менее, я бы сказал, что функциональные языки (читай: F #) - это путь.

Эта книга содержит простой пример того, как сделатьDSL с F #: http://www.manning.com/petricek/, а также Google находит много других хороших ссылок на эту тему.

0 голосов
/ 21 марта 2011

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

Большинство людей думают, что если у вас есть парсер, вам достаточно, и это технически верно, в том же духе.чувствую, что если у вас есть транзисторы, вы можете построить компьютер.

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

DMS предоставляет все эти возможности для поддержки создания DSL.И в этом смысле он выходит далеко за рамки F #.

0 голосов
/ 21 февраля 2011

Попробуйте MBase , но его стоит использовать, только если ваш DSL достаточно сложен, чтобы требовать эффективного компилятора и грамматики PEG.В противном случае FsYacc более чем достаточно.

...