11

私は新しい言語に取り組んでおり、文法を書いている間に、完全性、競合などについて文法をテストできるようにしたいと考えています。基礎となるパーサージェネレーターについてはあまり心配していません (ただし、.NET 用のジェネレーターが望ましいでしょう)。

つまり、機能リストは次のようになります。

  • テキスト エディターのビルド機能
  • 構文/セマティクス エラー レポート
  • 競合の報告
  • 文法テスト機能 (つまり、意図した文法でコードを記述して、文法定義の正確性を検証するためのウィンドウ)

Irony と呼ばれる CodePlex プロジェクトには、私が求めているものと似たようなものがありますが、必要な BNF としての文法の記述はサポートされていません。

4

4 に答える 4

7

パーサージェネレーターとしてANTLRをお勧めします。非常に機能が充実しており、C# やその他のターゲット言語のホストをサポートしています。

IDE には、 ANTLR IDEと呼ばれる Eclipse 用のプラグインとANTLRWorksと呼ばれるスタンドアロン IDE があり、どちらもうまく機能します。

ただし、ANTLR は LR(k) アルゴリズムではなく LL(*) アルゴリズムを使用することに注意してください。それでも、非常に優れており、ANTLRWorks は必要な左因数分解のほとんどを行うことができます。

于 2010-01-11T22:36:23.387 に答える
5

「新しい言語に取り組んでいる」ときに参照 BNF を正しく取得しようとしている場合、参照文法を特定のパーサー ジェネレーターに偏らせたくないでしょう。Bison (LALR(1)) または ANTLR(LL*) のテスト文法を書く際の問題の 1 つは、まさにそれを行うことです。また、「実際に解析できるように BNF ルールをコーディングするにはどうすればよいか」ということにこだわる必要もありません。おそらく、パーサー ジェネレーターではなく、文法の作業に関心があるからでしょう。

したがって、完全なコンテキスト フリー パーサー ジェネレーターを使用することをお勧めします。これにより、最小限の労力で最も自然な形で文法を書くことができます。これは、「テキスト エディター」、「エディター テスト ウィンドウ」などをあきらめることを意味するかもしれませんが、私の経験では (私のスタック オーバーフロー バイオを確認してください)、コンテキスト フリー パーサー ジェネレーターを使用すると、これらの機能が完全に圧倒されます。Edit-save-parse はそれほど手間がかかりません。

Bisonにはコンテキストフリーのパーサー生成を提供するGLRオプションがあり、オープンソースであることを理解しています。したがって、文法をテストするだけでよいかもしれません。

当社のDMS Software Reengineering Toolkitは商用であり、GLR パーサーも提供します。GLR パーサーは、C、C++、COBOL などの 30 以上の完全な言語を多数の方言で実装するために使用されているほか、Python、Ruby、PHP などの最新の言語も実装しています。 、 ....

DMS と Bison の違いは、DMS が完全な言語アナライザー/トランスレーターの構築のすべての側面をサポートするように設計されていることです (Unicode lexing、エラー報告と回復を伴う GLR 解析、自動ツリー構築、シンボル テーブル構築、制御およびデータ フロー分析、変換、プリティプリンティング、...)。「新しい言語」を真剣に評価したい場合は、最終的にはこれらすべてを行う必要があり、Bison はこの道に沿った小さな一歩にすぎません。DMSはあなたをずっと運びます。

于 2010-01-16T09:41:38.717 に答える
1

このツールが役立つかもしれません:Gold Parser Builder

残念ながら、それは窓だけです。

于 2012-09-29T13:37:11.010 に答える
0

Haskell、OCaml、C、C++、Java などの多くのターゲット言語に対して、ラベル付きの BNF から作業コードと makefile を生成できる BNFC をご覧ください。きれいなプリンター、抽象構文チェッカー/プリンター、独自のコンパイラーまたはインタープリター用のスケルトン コード、および postcript 言語ドキュメントを入手できます。

于 2010-01-21T02:12:45.853 に答える