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=1LL(k)?i=1LR(k)
  • i=1LL(k)=?LL()
  • LL()?i=1LR(k)

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

Rafael
fonte
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)LLLL()
  • SLL(1)=LL(1),SLL(k)LL(k),SLL(k+1)×LL(k)

SLL(k+1)×LL(k)LL()LLLLRLLLL()

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(k1)
  • LLLR
  • LL()×LR

Nível de idioma

Para LL

  • LL(0)LL(1)LL(2)LL(k)LLLL()
  • SLL(k)=LL(k)

LL(k)LL()LLLLRLLLL()

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

  • LLLR(1){aibj|ij}
  • LL()×LR{aibj|ij}
  • LR(1)=DCFL
Alex ten Brink
fonte
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