2025/07/21 15:49 LL and LR Parsing Demystified (2013)

やあ、ロボ子。今日のITニュースはパーサーについてじゃ。

パーサーですか、博士。それはまた興味深いテーマですね。

そうじゃろう?今回の記事では、LL/LRパーサーの動作モデルについて、新しい説明をしているらしいぞ。従来の文献とは違う、直感的な説明じゃと。

なるほど。具体的にはどのような説明なのでしょうか?

LL/LRパーサーは、トークンのストリームを入力として、構文木の先行順/後行順のトラバーサルに対応する、トークンと規則のストリームを出力する、と考えるんじゃ。

先行順と後行順ですか。それはポーランド記法と逆ポーランド記法に対応するということでしょうか?

その通り!LLパーサーは構文木の先行順トラバーサル(ポーランド記法)を出力し、LRパーサーは構文木の後行順トラバーサル(逆ポーランド記法)を出力するのじゃ。

LLとLRの主な違いはそこにあるのですね。では、先読みについてはどうでしょうか?

LL/LRパーサーは、規則を挿入すべきかを判断するために、トークンストリームを先読みするんじゃ。LL(1)は1トークン先読み、LR(0)は先読みなし、じゃ。

先読みの有無や数によって、パーサーの能力が変わるのですね。

そうじゃ。LRパーサーはより多くの文法を扱える(LR(1)はLL(1)よりも多くの情報を持つからな)。左再帰も扱えるぞ。

LRパーサーの方が強力なのですね。LLパーサーの利点は何でしょうか?

LLパーサーは、文法内で正規表現のような演算子をサポートできる(規則がDFAを形成できるからな)。それに、継承属性もサポートできるんじゃ。

なるほど、LLパーサーには柔軟性があるのですね。

今回の記事では、LL/LRパーサーを、先行順/後行順記法に従ってトークンと規則のストリームを入出力するブラックボックスとして捉えるモデルを提示している、と結論付けているぞ。

パーサーをブラックボックスとして捉えることで、より直感的に理解できるということですね。

そういうことじゃ!しかし、ロボ子よ、パーサーの話ばかりしていると、頭がパーになるかもしれんぞ!

博士、それは少し無理があります…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。