LL文法とLR文法の言語理論的比較


67

LR(k)パーサーはLL(k)パーサーよりも強力であるとよく言われます。これらの声明はほとんどの場合あいまいです。特に、固定またはすべてのkの和集合のクラスを比較する必要がありますか?では、状況はどうですか?特に、LL(*)がどのように適合するかに興味があります。kk

私の知る限り、LLパーサーとLRパーサーが受け入れるそれぞれの文法セットは直交しているため、それぞれの文法セットによって生成される言語について話しましょう。ましょによって解析することができる文法によって生成される言語のクラス示すLのR (K )パーサ、および他のクラスの類似します。LR(k)LR(k)

次の関係に興味があります。

  • LL(k)⊆?LR(k)
  • ⋃i=1∞LL(k)⊆?⋃i=1∞LR(k)
  • ⋃i=1∞LL(k)=?LL(∗)
  • LL(∗)∘?⋃i=1∞LR(k)

これらのいくつかはおそらく簡単です。私の目標は、「完全な」比較を収集することです。参考文献を歓迎します。


2
たぶんこれはあなたを助けることができます!文法階層画像
— アンドレアトゥッチ

1
@AndreaTucci:はい。ただし、生成された言語ではなく、文法のみを扱います。
— ラファエル

回答:


60

多数の封じ込めが知られています。ましょう封じ込めと表す⊂適切な封じ込めを。してみましょう×は万全を示します。⊆⊂×

ましょ、LをR = ⋃ k個の LのR (K )。LL=⋃kLL(k)LR=⋃kLR(k)

文法レベル

LLの場合

  • LL(0)⊂LL(1)⊂LL(2)⊂LL(2)⊂⋯⊂LL(k)⊂⋯⊂LL⊂LL(∗)
  • SLL(1)=LL(1),SLL(k)⊂LL(k),SLL(k+1)×LL(k)

SLL(k+1)×LL(k)LL(∗)LL⊂LLRLL⊂LL(∗)

LRの場合

  • LR(0)⊂SLR(1)⊂LALR(1)⊂LR(1)
  • SLR(k)⊂LALR(k)⊂LR(k)
  • SLR(1)⊂SLR(2)⊂⋯⊂SLR(k)
  • LALR(1)⊂LALR(2)⊂⋯⊂LALR(k)
  • LR(0)⊂LR(1)⊂LR(2)⊂⋯⊂LR(k)⊂⋯⊂LR

これらはすべて簡単な演習です。

LL対LR

  • LL(k)⊂LR(k)
  • LL(k)×SLR(k),LALR(k),LR(k−1)
  • LL⊂LR
  • LL(∗)×LR

言語レベル

LLの場合

  • LL(0)⊂LL(1)⊂LL(2)⊂⋯⊂LL(k)⊂⋯⊂LL⊂LL(∗)
  • SLL(k)=LL(k)

LL(k)⊂LL(∗)LL⊂LLRLL⊂LL(∗)

LRの場合

  • LR(0)⊂SLR(1)=LALR(1)=LR(1)=SLR(k)=LALR(k)=LR(k)=LR

これらのいくつかは、彼がLR(k)を導入した左から右への言語の翻訳についての論文でKnuthによって証明され、残りはLR(k)文法をLR(1)、SLR(1)および(1,1) Mickunasらによる有界右文脈文法

LL対LR

  • LL⊂LR(1){aibj|i≥j}
  • LL(∗)×LR{aibj|i≥j}
  • LR(1)=DCFL

素晴らしい答えですが、私はすでに賛成していました。Frank deRemerが元のLALR論文でLALR <= LRであると証明したと思いますか?(1969年?)
— user207421

LALR(k)⊆LR(k)LALRLR

1
@AlextenBrink私は論文を読み、フランク・デ・レマーに教えられましたが、それは30年以上前です;-)すべての詳細に感謝します。
— user207421

不等式ごとに文法の例を集めておくといいかもしれません。
— o11c

1
@ o11cそれは一つの答えを負担するだろうと思います。私の印象では、アレックスは必要に応じて良い参考文献を提供しました。彼は「簡単な運動」を述べています。読者が文法を思い付かない場合は、その特定のケースを尋ねる新しい質問を投稿できると思います。
— ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.