私はBoo、Irony.NET、およびGrammaticaと呼ばれるツールキットでDSLを作成しました。パーサジェネレータは複雑すぎると言いますが、判断が早すぎる可能性があります。実際、小さな学習曲線を乗り越えれば、非常に簡単に使用でき、簡単にオーバーライドできる可能性の広大な世界が開かれます。努力。ほとんどのパーサジェネレーターの文法を書くために必要な表記法を学ぶことは、正規表現を学ぶことにいくぶん似ていることがわかりました-それらを入れるには少し心を曲げる必要がありますが、報酬は重要です。
私の意見はこれです:もしあなたのターゲット言語が唖然としたビジュアルデザイナーによって扱われることができるほど単純であるなら、パーサージェネレーターを使ってそれのための文法を書くことは非常に簡単であるはずです。
ターゲットDSLが複雑で、文法を書くのに苦労する必要がある場合は、とにかく、ダムダウンしたビジュアルツールはマスタードをカットせず、とにかく文法を書くことを学ぶ必要があります。
ただし、内部DSLと外部DSLについては長期的には同意します。私はBooで内部DSLを作成し、それを機能させるためにDSL構文を変更する必要があり、それは常にハックのように感じました。Irony.NETまたはANTLRを使用した同じ文法は、より柔軟に実行するのと同じくらい簡単でした。
いくつかのオプションについて説明しているブログ投稿があります。投稿はランタイム式評価用のDSLの作成を中心にしていますが、ツールはすべて同じです。
Irony.NETでの私の経験はすべて前向きであり、Irony.NETを使用して実装されたいくつかの参照言語があり、開始するのに適しています。あなたの言語が単純であれば、立ち上げて実行することは絶対に複雑ではありません。TinyParserと呼ばれるCodeProjectのライブラリもあります。これは、パーサーを純粋なソースコードとして生成するため、非常に興味深いものです。つまり、最終製品にはサードパーティの参照がまったくありません。でも、自分では使ったことがありません。