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.


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

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.