Как определить DSL над C # - PullRequest
       15

Как определить DSL над C #

2 голосов
/ 17 сентября 2009

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

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

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

Я думал о том, чтобы разобрать его вручную с помощью регулярных выражений. Но лично я хотел бы иметь что-то более ... пригодное для использования.

Так что бы вы предложили?

Ответы [ 8 ]

5 голосов
/ 17 сентября 2009

Похоже, вы говорите о реализации одной из функций .Net 4.0, код контрактов .

Так что я думаю, что моим рекомендуемым инструментом будет VS.Net 2010.

1 голос
/ 17 сентября 2009

Если вы смотрите конкретно на DSL, взгляните на проект ANTLR . В прошлом мы успешно использовали его в моей компании.

0 голосов
/ 23 мая 2013

Вы должны посмотреть на проект Ирония на http://irony.codeplex.com/

0 голосов
/ 07 октября 2009

Вы можете попробовать DSL Tools для Visual Studio.

0 голосов
/ 30 сентября 2009

Зачем так далеко? Начните с использования обобщений и свободного интерфейса. Начните с простого и проработайте его через некоторое производство. Если трение слишком велико, когда речь идет о свободном интерфейсе, посмотрите на использование DSL.

0 голосов
/ 30 сентября 2009

Взгляните на Осло от Microsoft, не уверен, что он делает то, что вы хотите, но я знаю, что вы можете создавать DSL-парсеры и задавать грамматики, а также генерировать библиотеки классов, которые могут анализировать данные на основе грамматика.

Более подробная информация о языке "M" и о том, как его использовать, здесь

0 голосов
/ 30 сентября 2009

Возможно, стоит проверить Построение специфичных для предметной области языков в Boo (Boo - это язык CLR, концепции следует перенести на C #). Примером проекта является Simple State Machine .

0 голосов
/ 30 сентября 2009

С DSl дело в том, что они редко бывают эффективными в изоляции. Чтобы быть полезным для написания реального программного обеспечения, вам действительно нужно иметь возможность встраивать DSL в язык хоста. Сравните, например, то, как работает Linq против простого SQL. Другим хорошим примером является функция XML-литерала в VB. И то, и другое позволяет вам писать настоящий код на PL общего назначения и переплетать его с более простым декларативным кодом DSL.

В результате получается нечто гораздо более мощное, чем отдельный SQL или простой редактор XML.

Недостатком этого, к сожалению, является то, что ни C #, ни VB не предлагают никаких функций метапрограммирования, поэтому единственный способ сделать это для основных разработчиков .net - это создать свой собственный язык. Если это то, что вы делаете просто для удовольствия, вы можете изменить моно-компилятор C #, чтобы добавить интересующие вас функции в язык. Другой альтернативой может быть попытка рубина. Он имеет гибкий синтаксис, который позволит вам избежать сумасшествия. Лично я предпочел бы взломанный подход C #.

...