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

Я провел несколько поисков по разработке DSL в Visual Studio. Вначале я узнал, что для VS2010 существует SDK визуализации и моделирования. У него есть инструмент под названием DSL. Но похоже, что это только для разработки графического DSL.

Затем я увидел несколько сообщений, в которых говорилось, что «Oslo» - это инструмент для разработки текстового 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?


person Wayne Yeung    schedule 16.02.2011    source источник
comment
Обновление: наконец, я использовал инструмент с открытым исходным кодом - Irony (irony.codeplex.com) - для реализации синтаксический анализатор, но похоже, что автор не собирается дальше развивать или поддерживать инструмент. В настоящее время в Eclipse для Visual Studio нет рабочей среды DSL, такой как Xtext (xtext.org), но кто-то разрабатывает такого рода инструмент (metasharp.codeplex.com).   -  person Wayne Yeung    schedule 25.07.2011


Ответы (6)


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

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

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

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

-Нил

person TechNeilogy    schedule 16.02.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 вам просто нужна цепочка инструментов грамматики / парсера / и т. Д., И можно выбрать либо FsLex / FsYacc, либо ANTLR или FParsec. (У меня недостаточно опыта работы с любым из них, чтобы знать, какие компромиссы между ними есть.)

person Brian    schedule 16.02.2011

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

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

person TechNeilogy    schedule 06.04.2011

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

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

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

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

person Tuomas Hietanen    schedule 16.02.2011
comment
Я больше не вижу в электронной документации упомянутых служб моделирования SQL Server. Можете ли вы предоставить ссылку на документацию Microsoft по этому поводу (не сообщения в блогах). - person John Saunders; 16.02.2011
comment
К сожалению, я не видел книг о моделировании SQL Server. Просто такие блоги, как Дуглас Парди и Барт де Смет. - person Tuomas Hietanen; 16.02.2011

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

person SK-logic    schedule 21.02.2011

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

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

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

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

person Ira Baxter    schedule 21.03.2011
comment
@Ira: все еще на этом, я вижу. Как насчет того, чтобы отредактировать свой ответ и сказать, что я разрабатываю и продаю коммерческий продукт (DMS Software Reengineering Toolkit), предназначенный для обработки произвольных DSL? Не ходите вокруг да около: скажите нам, что это ваш продукт, что вы зарабатываете на нем деньги, а затем, пожалуйста, сделайте и расскажите нам как это решит проблему, поставленную вопросом. Вы получите от меня положительные голоса за такие ответы (я думаю, что я проголосовал за вас дважды, кстати). - person John Saunders; 24.03.2011
comment
meta.stackexchange. ru / questions / 57497 /. Что, не понятно, что я с этим связан? (Обычно я следую рекомендованной политике и говорю «Наш…», на этот раз я немного изменился). И ОП спрашивает: «Какой инструмент лучше?». Хорошо, я буду придерживаться предложенных средств. - person Ira Baxter; 24.03.2011
comment
@Ira: Я помню это обсуждение. Мне все равно. Я только что дал вам свои критерии. Мне интересно, что с вами не так, что вы не будете просто и прямо сказать, что продаете свой продукт и, что ваш продукт решает проблему, и вот как. Может быть, это просто ваша манера речи, но вы напоминаете мне человека, пытающегося избежать проблемы. Поскольку проблема настолько проста, вы действительно меня раздражаете. - person John Saunders; 24.03.2011
comment
@Ira: вот мысль. Только для этого вопроса, почему бы не отредактировать свой ответ, сделав его явным? Посмотрите, придет ли конец света. Бьюсь об заклад, это не так. Если вы продаете хороший продукт, который решает проблему, то я думаю, что прямолинейность на самом деле поможет продать больше продукта. - person John Saunders; 24.03.2011
comment
@John: Я тоже помню обсуждение, и я знаю, что вам все равно, что было сделано предложение политики, которое вам не понравилось. Собираемся ли мы делать это снова и снова? - person Ira Baxter; 24.03.2011
comment
@Ira: Я также хочу побудить вас (снова) подробно рассказать и привести примеры того, как ваши продукты решают эти проблемы. Это также для меня - я неоднократно приближался к изучению ваших продуктов, и больше примеров, скорее всего, заставят меня это сделать. Там, где я сейчас работаю, нам наверняка понадобится реинжиниринг! - person John Saunders; 24.03.2011
comment
@John: Возможно, у меня действительно проблема с ячменем. В приведенном выше ответе содержится краткое описание того, что вам нужно, и ссылка на гораздо более длинное и подробное объяснение, которое я решил не повторять, потому что считаю, что это объяснение подходит. Вы переходили по ссылке? - person Ira Baxter; 24.03.2011
comment
@John: Я часто пытаюсь дать более подробные ответы; см. stackoverflow.com/questions/5323093/ - person Ira Baxter; 24.03.2011
comment
@John: И если у вас есть вопрос о реинжиниринге, вы всегда можете его опубликовать. Кто знает, кто может ответить? - person Ira Baxter; 24.03.2011
comment
@Ira: Я перешел по ссылке и прочитал ее. Я перечитаю его позже, чтобы увидеть, как он применим к моим текущим рабочим ситуациям. Меня не беспокоят различия в стилях в том, как вы показываете, что ваш продукт решает проблему - бывает, что я бы сказал об этом более четко. Меня больше беспокоит тот факт, что, похоже, вы стесняетесь того факта, что ваш продукт является коммерческим. Я бы с гордостью сказал это, а затем подробно показал бы, как продукт решает проблему. Меня беспокоит, что вы не говорите прямо и гордо, что это мой продукт, и я надеюсь, что вы его купите или что-то в этом роде. - person John Saunders; 24.03.2011
comment
@Ira: Я проголосовал за три ваших ответа. И когда я получу конкретный вопрос по реинжинирингу, я обязательно его опубликую. - person John Saunders; 24.03.2011