あなたの質問は非常にタイミングが良いです。私は最近、ツールAntlrを使用してDSLを作成しました。Antlrはパーサー/レクサージェネレーターです。
DSL(および他の多くのもの)の簡単な構築を可能にし、StringTemplate(同じ人によって書かれた)と組み合わせると、コード生成で非常に強力になります。また、複数の言語をターゲットにすることもできます。デフォルトはJavaですが、パーサーとレクサーはC#(ターゲットの1つ)にあります。
Antlrの多くの利点の1つは、説明的なエラーメッセージと、文法をステップスルーしてASTツリーを視覚的に確認できるIDE /デバッガー(AntlrWorks)です。
John Saundersは、組み込みのVisualStudioDSLツールキットの使用を以下に提案しました。最終的に、私はそれらのツールが収縮にはほど遠いことに気づきました。基礎となるテキスト文法を簡単に説明する機能がないGUIを必要とすることは、私のニーズには不十分のように思われます。
DSLパーサー/レクサーに加えて、インテリセンス、エラーハイライト、コード補完、およびテンプレートアイテム/プロジェクトを提供するために、VisualStudio言語サービスも作成しました。
エクストラを実装しなくても、DSLを使用すると反復作業を簡素化できます。私のDSLは特にCSLAフレームワークを対象としており、すべての配管でビジネスオブジェクトを簡単に生成できるため、開発者はビジネスロジックについてのみ心配することができます。
DSLの小さな例を次に示します。
datadef Object1Datadef
{
tables
{
MyTable:PK[MyTableID], column1, column2;
}
}
root MyObject
{
datadef Object1Datadef;
read "all";
write "admin", "superusers";
int _Myvariable;
}
DSLによってドメインをより速く、より簡単に記述でき、生産性が向上するのであれば、それは価値があります。