web-dev-qa-db-ja.com

優れたC#コンパイラ-コンパイラ/パーサジェネレータとは何ですか?

LL(k)言語のEBNFを指定すると、C#パーサーが提供され、EBNFで定義された型のクラスが生成されるパーサージェネレーターを探しています。

23
HasaniH

ゴールド パーサジェネレータが行く限りOKです。

6
plinth

[〜#〜] antlr [〜#〜] (他に言うことはありません)

24

[〜#〜] lllpg [〜#〜] と呼ばれる新しいパーサジェネレータがブロックにあり、LL(k)文法とゼロ幅アサーションをサポートしています。ランタイムライブラリはオプションです(基本クラスで十分です)。ドキュメントは現在かなり詳細になっています。私はLLLPGを使用して、Enhanced C#(実際にはLLLPGの主要な入力言語)と呼ばれるC#の方言のほとんどを解析しました。ただし、入力構文はEBNFではありません(C#+ ANTLRスタイルのコードのマッシュアップのようなものです)。

完全開示:私はそれを書きました。質問は大歓迎です。

編集:「C#パーサジェネレータ」のトップGoogle検索結果は、「私のパーサジェネレータはスタンドアロンでは実際には使用できない」と主張する「Tomassetti」という名前の男によって書かれています。 「-これは、PCがまた Webブラウジングやスプレッドシートを実行できるため、「スタンドアロンのゲームリグとしては実際には使用できない」と言っているようなものです。確かに、Visual Studio拡張機能をインストールした後は、個別にNuGetに移動してランタイムライブラリ(Loyc.Syntax)を取得する必要がありますが、それが彼の意味ではないと思います。また、実際に使用しようとしたこともないと思います。 LLLPGの設計は機能であり、バグではありません。私が言えるのは、試してみて、あなたの考えを教えてください。

4
Qwertie

でアイロニーを見つける http://irony.codeplex.com/

長所:それは単純です短所:-ドキュメントの欠如-かなり遅い

4
Ali

MinosseCC 、C#へのJavaCCのポートを確認することをお勧めします。別の可能性は Spart です。

4
Vinay Sajip

GrammaticaはLL(k)をサポートしています。 http://grammatica.percederberg.net/

2
Bob Peterson

Coco/R (SSWから-"Johannes Kepler" University Linz)

1
Traummaennlein