10

私はANTLRを学び始め、2007年の本「TheDefinitive ANTLR Reference」とANTLRWorks(文法を作成するためのインタラクティブなツール)の両方を持っています。そして、そのような人である私は、第3章(「せっかちな人のためのクイックツアー」)から始めました。

特にいくつかのエラーはかなり侵入できないため、これはかなり苦痛なプロセスです(たとえば、ANTLR:「ルールスコープでの属性アクセスの欠落」の問題は、私にとって「何かが間違っている」ことを意味します)。また、非常に単純な文法(3〜4プロダクションのみ)と単純な入力(2行)があり、実行すると「OutOfMemory」エラーが発生します。

ANTLRサイトは便利ですが、多少断片化されており、一部のSOユーザーは本とチュートリアルが高いエントリーレベルを期待しているとコメントしています( https://stackoverflow.com/questions/278480/good-tutorial-for-antlr )。このため、私はANTLRディスカッションリストに近づくことを躊躇してきました。

後で私たちはそれを理解し始めています。穏やかに拡張できる単純で信頼できる例があると便利です。ANTLRに基づいて私たちの考え方のかなりの部分を改造したので、それは確かに習得する価値があります。

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

SOに関するANTLRの質問のいくつかは私を大いに助けてくれましたが、それらを見つけるのは少しアドホックです。そこで、SOユーザーが学習プロセスの苦痛を軽減するためにどのように役立つかを知りたいと思います。(参考書を参照する場合は、特定のページを指すと便利です)。

編集します。@duffymoと@JamesAndersonは、ANTLRが大変な作業であることを確認しました。これは主にパーサーが難しいためです。(FWIW私はLEX / YACCなどを経験しましたが、ANTLRの方が強力で、操作が簡単であることは間違いありません。)次のような汚れを回避できる領域があると便利だと思います。

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

そして、これらの種類の多くが役立つでしょう。

4

3 に答える 3

7

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

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

  1. v2を忘れてください。バージョン3が標準です。以前のバージョンまたはそのドキュメントを考慮して時間を無駄にしないでください。
  2. OutOfMemoryErrorは、定義した文法に循環的なものがあることを示しています。
  3. IntelliJには、ANTLRv3を操作するための優れたIDEがあります。文法のグラフィック表現、ステップスルーデバッグなどが提供されます。ANTLRで多くの作業を行う場合は、ライセンスを購入するのに数ドルの価値があります。

ANTLRをマスターするのは簡単ではありません。この本は良いですが、密度が高いです。お気づきのとおり、エラーメッセージはわかりにくいものです。ここの誰かがそれを簡単にすることができたら私は驚きます。

于 2009-11-02T11:05:09.970 に答える
6

申し訳ありませんが、ANTLR(実際、javacc、bison、または任意の全機能パーサー)の私の経験では、ほとんどの学習は、自分の間違いを修正することによって行われます。

他の人々のコードの良い例を取得すると、これがいくらか削減されます。最良の例は非常に単純に見えますが、見た目を簡単にするために必要な汗と髪の毛をすべて見逃しています。

于 2009-11-02T11:21:32.047 に答える
2

コマンドラインを使用する場合でも、問題が発生した場合はAntlrWorksを使用する価値があります。ダイアグラム表現により、私が間違っていることを簡単に確認できます。

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

于 2009-12-07T13:11:02.807 に答える