21

.NET 用の優れたパーサー ジェネレーター (lex/yacc または antlr を考えてください) はありますか? 弁護士を怖がらせないライセンスを持っている人はいますか? 多くの LGPL がありますが、私は組み込みコンポーネントに取り組んでおり、一部の組織は私が LGPL に依存することを快く思っていません。

Oslo がこの機能を提供する可能性があると聞いたことがありますが、それがビルド時の依存関係なのか、それともランタイムの依存関係なのかはわかりません。オスロが提供するものを誰か明確にしてもらえますか?

更新
私が本当に欲しいのは、ビルド時のみの依存関係であるパー​​サージェネレーターです。ANTLR にはランタイム コンポーネントがあるようです。

4

5 に答える 5

9

F# には yacc と lex の実装が付属していることを発見しました。.NET のニーズに合わせて、このパーサー ジェネレーターを活用できるようです。

F# サンプル

解析サンプルは、 fsyacc および fslex ツールを使用して、F# で使用するパーサーとレクサーを構築する方法を示しています。(モード: コンパイル済み、実行対象: Mono を含む任意の CLI)

関連するブログ投稿:

于 2009-08-20T12:13:24.950 に答える
8

うーん、あなたはすでに Antlr について言及しているので、なぜそれを考慮しないのかわかりません...

Antlr は C# ( http://www.antlr.org/wiki/display/ANTLR3/Antlr%2B3%2BCSharp%2BTarget ) を生成し、BSD ライセンス ( http://www.antlr.org/license.html ) を持っているようです。制限がほとんどないこと。


Irony ( http://irony.codeplex.com/ ) にはかなりの数のダウンロードがあり、(目に優しい) MIT ライセンスがあります。完全なソース コードがあるように見えるので、これをアプリに直接「埋め込む」ことができる可能性があります。

于 2009-08-10T21:28:14.457 に答える
4

個人的にはGOLD Parser Generatorのファンです。コードを直接生成するのではなく、DFA と LALR の状態テーブルを提供するだけで、ニーズに合わせて独自のパーサー エンジンを作成できます。

物事を構造化するこの方法は、すべての人やすべての状況に適しているわけではありません (言語が LALR の制限を満たさなければならないため、ある程度の柔軟性が失われます)。したがって、これが「正しい方法」であるとは主張しませんが、解析アルゴリズムの分離は気に入りました。解析ルールから (これは、実行時の要件が完全かつ簡単に制御できることを意味します)。

もちろん、独自のエンジンを作成する必要はありません。たとえば、C# で作成された 3 つのエンジンサイトにリストされています。これらのエンジンがどのようなライセンスを使用しているかはわかりませんが、ライセンスが気に入らない場合は、独自のエンジンを作成することは率直に言って簡単です。GOLD には、(LALR 解析を理解していれば期待できるように) 単純なステート マシン システムである、動作するアルゴリズムの完全な説明を提供するドキュメントが含まれています。もちろん、GOLD プログラム自体は無料で使用できます。

GOLD には、言語文法を作成するための IDE も含まれており、非常に役立ちます。

于 2009-08-20T12:25:49.383 に答える
3

ANTLR にはランタイム コンポーネントがありますが、ANTLR が使用するいくつかのクラスをいつでも取得してプロジェクトに含めることができます。その時点で、ランタイム アセンブリを参照する必要がなくなります。これは、BSD ライセンス (C# 3 ターゲットの場合は 3 条項、C# 2 ターゲットの場合は 4 条項) に基づいてライセンスされています。

于 2009-08-10T22:01:15.637 に答える
1

また、 Malcolm Crowe の LEX/YACC コンパイラ ツールを試すこともできます。良い例がたくさん。

于 2009-08-20T12:26:18.043 に答える