私は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の方が強力で、操作が簡単であることは間違いありません。)次のような汚れを回避できる領域があると便利だと思います。
- 変数名の正しい大文字化を確認してください
- パッケージ名をレクサーとパーサーに追加します
- 優先順位に影響するため、ルールの順序に注意してください
そして、これらの種類の多くが役立つでしょう。