質問

私は ANTLR の学習を始めており、2007 年の書籍「The Definitive ANTLR Reference」と ANTLRWorks (文法作成用の対話型ツール) の両方を持っています。で、そんな人間なので第3章からスタートしました。(「せっかちな人のためのクイックツアー」)。

特に一部のエラーはかなり無視できないため、これはかなり面倒なプロセスです(例: アントラー:「ルールスコープに属性アクセスがありません」問題 これは私にとって「何か間違っている」という意味です)。また、非常に単純な文法 (3 ~ 4 つのプロダクションのみ) と単純な入力 (2 行) があり、実行すると「OutOfMemory」エラーが発生します。

ANTLR サイトは便利ですが、やや断片的であり、一部の SO ユーザーからはコメントが寄せられています (https://stackoverflow.com/questions/278480/good-tutorial-for-antlr) この本とチュートリアルは高い入門レベルを想定しています。このため、私は ANTLR ディスカッション リストにアクセスすることに消極的でした。

後で 私たちはそれを理解し始めています。緩やかに拡張できる、単純で信頼できる例があれば便利です。ANTLR に基づいてかなり多くの考え方を再構築したので、マスターする価値は確かにあります。

1 つの問題は、ANTLR V3 が V2 から大きく変更されていることです。SO (および ANTLR ページ) の 1 つの回答では、現在は利用できなくなった V2 構文について言及しています。

SO に関する ANTLR の質問のいくつかは私にとって非常に役に立ちましたが、それらを見つけるのは少し場当たり的です。そこで私は、SO ユーザーが学習プロセスの苦痛を軽減するためにどのように支援できるかを知りたいと思っています。(参考書を参照する場合は、特定のページを示すと便利です)。

編集. 。@duffymo と @JamesAnderson は、ANTLR が大変な作業であることを認めています。その主な理由はパーサーが難しいからです。(FWIW 私は LEX/YACC などを経験しました。そして、ANTLR がより強力で、扱いやすいことは疑いの余地がありません。) 次のような汚れを回避できる領域があると依然として便利だと思います。

  • 変数名の大文字化が正しいことを確認する
  • パッケージ名をレクサーとパーサーに追加します
  • ルールの順序は優先順位に影響するため注意してください

このようなものがもっとあれば便利です。

役に立ちましたか?

解決

私も同意します - ANTLR は気の弱い人向けではありません。文法とパーサーは簡単ではないため、高い入門レベルが期待されます。

そうは言っても、ここにいくつかの提案があります。

  1. v2のことは忘れてください。バージョン 3 が標準です。以前のバージョンやそのドキュメントを検討することに時間を無駄にする必要はありません。
  2. OutOfMemoryError は、定義した文法に循環的な部分があることを示しています。
  3. IntelliJ には、ANTLR v3 を操作するための素晴らしい IDE が備わっています。文法のグラフィカルな表現、ステップスルーのデバッグなどが提供されます。ANTLR を使用して多くの作業を行う場合は、数ドルかけてライセンスを購入する価値があります。

ANTLR をマスターするのは簡単ではありません。この本は良いですが、分厚いです。ご指摘のとおり、エラー メッセージは不可解です。ここで簡単にできる人がいたら驚くでしょう。

他のヒント

申し訳ありませんが、ANTLR(実際JavaCCの、バイソンまたは任意のフル機能パーサー)の私の経験は、あなたの学習のほとんどは、あなた自身の過ちを固定することによって可能になるということです!

ややこれを削減します他の人々のコードの良い例の取得、最高の例は本当に簡単に見える - 。しかし、あなたはすべての汗を欠落しており、髪は、それがいることを見てそれらを得るためにかかった引っ張って簡単

あなたはコマンドラインを好む場合でも、それはあなたが問題を抱えているときAntlrWorksを使用して価値があります。 diagramatic表現は、それが簡単に私が間違ってsgoingものを見るために作ることができます。

絵は千のエラーメッセージの価値があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top