2

antlr3の「島の文法」とは何ですか?

4

2 に答える 2

4

アイランド文法は、ほとんどの言語をテキストのブロブ(「水」)として扱い、文法規則(「アイランド」)を使用して解析する対象の言語の一部を選択するものです。たとえば、アイランドグラマーを作成して、C#プログラムで見つかったすべての式を選択し、変数/メソッド/クラスの宣言とステートメント構文(if、while、...)を無視することができます。

本当の質問は、「島の文法を使うべきか」ということです。

プラスのメリット:

  • 処理したい言語の完全で完全な文法を書く必要はありません。

欠点:

  • 関心のあるソースの一部を選択するのは必ずしも簡単ではありません。たとえば、島の文法がすべてのコメントを詳細に記述していない限り、島の文法がコメントアウトされたコードのブロックを取得しないようにするにはどうすればよいですか?島の文法のポイントは、そのような詳細に立ち入るのを避けることでしたが、それでもここではそうしなければなりません。

  • あなたが今それを理解しているので、あなたは問題に集中するために島の文法を使うことができるだけです。問題が解決した場合、島の文法も変更する必要があるかもしれませんが、それは必ずしも簡単ではありません。

  • プログラム操作における最も興味深い問題は、構文(「解析」など)を決定し、操作するためのある種のツリーを構築できるだけでなく、記号の意味も決定できることを必要とします。アイランド文法を使用すると、それを行う可能性を効果的に取り消すことができます(ブロック、宣言などのすべての構文を含めたい場合を除きます...突然、アイランド文法ではなく、小さな大陸の文法になります) 。そして、それは本当にあなたができることを制限します。

私を偏見と呼んでください、しかし私はこの種のことを長い間やっています。島の文法はそれほど役に立たないと思います。私が提案する代替案は、共通の基盤に基づく多くの言語の償却コストパーサーであり、DMS SoftwareReengineeringToolkitと呼ばれます。

YMMV。

于 2010-04-02T15:30:30.070 に答える
1

何を言っているのか正確にはわかりませんが、これまでに書いたことについて言及していないので、ここから始めます。

http://www.antlr.org/wiki/display/ANTLR3/Island+Grammars+Under+Parser+Control

于 2010-04-01T14:52:36.513 に答える