Comparação teórica da linguagem das gramáticas LL e LR


67

As pessoas costumam dizer que os analisadores LR (k) são mais poderosos que os analisadores LL (k) . Essas declarações são vagas na maioria das vezes; em particular, devemos comparar as classes para um fixo ou a união sobre todos os k ? Então, como está realmente a situação? Em particular, estou interessado em saber como LL (*) se encaixa.kk

Até onde eu sei, os respectivos conjuntos de gramáticas que os analisadores LL e LR aceitam são ortogonais; portanto, vamos falar sobre os idiomas gerados pelos respectivos conjuntos de gramáticas. Deixe indicam a classe de linguagens geradas por gramáticas que podem ser analisados por um G R ( K ) do analisador, e semelhante para outras classes.LR(k)LR(k)

Estou interessado nas seguintes relações:

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

Alguns destes são provavelmente fáceis; meu objetivo é coletar uma comparação "completa". Referências são apreciadas.


2
Talvez isso possa te ajudar! Imagem de hierarquia gramatical
— Andrea Tucci

11
@AndreaTucci: Sim, mas isso abrange apenas as gramáticas, não os idiomas gerados.
— Raphael

Respostas:


60

⊆⊂×

LL=⋃kLL(k)LR=⋃kLR(k)

Nível gramatical

Para 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(∗)

Para 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

Estes são todos exercícios simples.

LL versus LR

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

Nível de idioma

Para LL

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

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

Para LR

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

Algumas delas foram comprovadas por Knuth em seu artigo Na tradução de idiomas da esquerda para a direita, na qual ele introduziu o LR (k), o restante é comprovado em Transformando gramáticas do LR (k) em LR (1), SLR (1), e (1,1) gramáticas vinculadas ao contexto direito de Mickunas et al.

LL versus LR

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

Excelente resposta, porém, eu já havia votado. Eu pensaria que Frank deRemer provou LALR <= LR em seu artigo original sobre LALR? (1969?)
— user207421

LALR(k)⊆LR(k)LALRLR

11
@AlextenBrink Eu li o jornal e fui ensinado por Frank de Remer, mas há mais de 30 anos ;-) Obrigado por todos os detalhes.
— usar o seguinte comando

Pode ser bom coletar exemplos de gramáticas para cada desigualdade.
— o11c

11
@ o11c Acho que isso sobrecarregaria uma única resposta. Minha impressão é que Alex deu boas referências sempre que necessário; ele afirma "exercício fácil" para alguns. Eu acho que se um leitor não consegue apresentar uma gramática, ele pode postar uma nova pergunta pedindo esse caso específico.
— Raphael
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.