私はlex/yaccを使用していましたが、今ではANTLRに切り替えようとしています。主な関心事は、ANTLRはLALRであるyaccとは違って、LL(*)パーサーであるということです。私はボトムアップを考えるのに慣れており、LL文法の利点が何であるか正確には分かりません。 LL文法は理解しやすく、最近普及していると言われています。しかし、LRパーサはより強力であると思われる。 LLパーザは左回帰を扱うことができませんが、いくつかの回避策があるようです。LALR対LLパーサー
LALRよりLL文法の利点は何ですか?誰かが私にいくつかの例を教えていただければ幸いです。有用な記事へのリンクも素晴らしいでしょう。
ご協力いただきありがとうございます。
(私はこれは素晴らしいリソースです参照してください。What advantages do LL parsers have over LR parsers?、それはいくつかの例で、より良いてきたでしょう)
誰かがパーザージェネレータを手渡す場合、定義によって、「実装するのが簡単です」。その場合、あなたは努力を最小限に抑えるために、最大級の言語を簡単に処理するパーサジェネレータを選択します。見通しから、IMHO、LRはLLをかなり手際よく勝ちます。 GLRはLRをかわいく勝ちます。 –
私は同意しますが、それでもなおLLは実装が簡単です。私は、LRは通常、ツールを使用する必要があることを指摘していました。私は非常に興味深いことに、再帰的な降下を手書きで書くことができ、コードと文法が手に入ることが分かりました。 –
はい、その興味をそそる、パーサーを構築する人々は、それらについて知っておく必要があります。文法が大きくなるにつれて、それをLLの形に強制するのは不便で、LRのいくつかの点では、概念の単純さよりも勝っています。パーサージェネレータを構築していなければ、LRは理解しやすく、周囲にはたくさんあるようなものではありません。 –