Ваш вопрос достаточно точно рассчитан. Недавно я написал DSL, используя инструмент Antlr .
Antlr - генератор синтаксического анализатора / лексера.
Он позволяет легко создавать DSL (и многие другие) и в сочетании с StringTemplate (написанным одним и тем же человеком) становится очень мощным средством генерации кода. Он также может ориентироваться на несколько языков. Наш синтаксический анализатор и лексер находятся на C # (одна из целей), хотя по умолчанию используется Java.
Одним из многочисленных преимуществ Antlr являются описательные сообщения об ошибках и IDE / отладчик (AntlrWorks), который позволяет пошагово просматривать грамматику и визуально видеть деревья AST.
Джон Сондерс предложил ниже использовать встроенный инструментарий Visual Studio DSL. В конечном счете, я обнаружил, что эти инструменты слишком далеки от ограничения. Требовать графический интерфейс без какой-либо возможности легко описать основную текстовую грамматику просто кажется недостаточным для моих нужд.
Наряду с синтаксическим анализатором / лексером DSL я также написал службу языка Visual Studio, обеспечивающую интеллектуальный смысл, подсветку ошибок, завершение кода и элементы / проекты шаблонов.
Даже если вы не реализуете дополнительные функции, DSL может упростить повторяющуюся работу. Мой DSL специально нацелен на CSLA framework , с легкостью генерируя бизнес-объекты со всей сантехникой, позволяя разработчикам беспокоиться только о бизнес-логике.
Вот небольшой пример DSL:
datadef Object1Datadef
{
tables
{
MyTable:PK[MyTableID], column1, column2;
}
}
root MyObject
{
datadef Object1Datadef;
read "all";
write "admin", "superusers";
int _Myvariable;
}
Если ваш DSL позволяет описывать ваш домен быстрее, проще и повышает производительность, то это того стоит.