9

Visual Studio での DSL の開発についていくつか検索しました。最初に、VS2010 用の Visualization and Modeling 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 を開発したい場合、どのツールが最適かを知りたいです。FSLex と FSYacc で F# powerpack を利用する DSL パーサーを実装したらどう思いますか?

4

6 に答える 6

7

私は現在、FsLex/FsYaccを使用していくつかの外部テキストベースのDSLを開発しています。ハンドパーサーを使用していましたが、設計段階でFsLex/FsYaccの保守がはるかに簡単であることがわかりました。

FsLex / FsYaccはANTLRほど洗練されていませんが、ほとんどのDSLかなり単純なので、FsLex/FsYaccはVisualStudio内で使用するのに最適です。また、DSLをシンプルに保つことは、制限されて簡単に習得できるようにすることを目的としているため、良いことです。

Martin Fowlerの本は、DSLのアイデアの百科事典としてよりも、例や詳細については少ない、優れたリソースであることがわかりました。DSLの使いやすさやその他の設計面に関する彼の議論も読む価値があります。Toumasが示したように、F#または関数型言語のいずれもカバーしていません。ファウラー氏は、本をタイムリーに市場に出すためのこれらの主題の経験が不足していると書いています。

FsLex / FsYaccを称賛しましたが、誰かがF#用の優れたANTLRバックエンドを作成してくれることを願っています。:)

-ニール

于 2011-02-16T21:49:06.423 に答える
6

私は組み込み 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 のいずれかがさまざまな選択肢です。(これらのトレードオフを知るには、これらのいずれについても十分な経験がありません。)

于 2011-02-16T20:28:28.343 に答える
2

以前の記事を書いて以来、Terence Parr の著書「Language Implementation Patterns」も購入して読みました。Martin Fowler の本よりもかなり専門的ではありますが、これは優れています (追加の資料があれば、新しいミレニアムの「ドラゴン ブック」になる可能性があります)。例題は Java と ANTLR に強く基づいていますが、テキストがメインなので、言語開発環境に関係なく役立つ本です。

興味深いことに、2 冊の本の間にはほとんど重複がありません。Martin Fowler の本は、仕様や構成に使用されるものなど、基本的な DSL の設計と実装をうまくカバーしていますが、Terence Parr の本はより技術的で、より洗練された言語やバイトコードにまで及ぶ領域をカバーしています。マシン。予算に余裕がある場合は両方をお勧めしますが、それ以外の場合は、特定のドメイン内でどちらかを選択することをお勧めします.

于 2011-04-06T14:44:08.600 に答える
1

Martin Fowler がDSL:s に関する新しい本を出しています。残念ながら、Microsoft のツールや関数型言語についてはあまり説明しません。

Microsoft はグラフィカル ツール「Quadrant」をサポートしなくなりましたが、MGrammar は引き続きサポートされており、SQL サーバーに統合されています。MGramar は「DSL 作成言語」です。

それでも、関数型言語 (読み取り: F#) が進むべき道だと思います。

この本には、F# で DSL を作成する方法の簡単な例があります: http://www.manning.com/petricek/ また、Google はこのトピックに関する他の多くの参考文献を見つけています。

于 2011-02-16T20:33:33.070 に答える
0

私たちの DMS Software Reengineering Toolkit は、任意の DSL を処理するように設計されています (たまたま私がアーキテクトです)。

ほとんどの人は、パーサーがあれば十分だと考えていますが、トランジスタがあればコンピューターを構築できるのと同じ意味で、技術的には真実です。

私の経験では、単なるパーサー以上のものを必要とします。ジェネレーターが特定の識別子の意味を理解できるようにシンボル テーブルを構築する方法、仕様を分析する手段、翻訳を簡単にエンコードする方法、最適化を適用する方法が必要です。生成された結果に。

DMSは、これらすべての機能を提供して、 DSL の構築をサポートします。その意味では、F# をはるかに超えています。

于 2011-03-21T04:12:51.017 に答える