Comparaison théorique des langages des grammaires LL et LR

68

Les gens disent souvent que les analyseurs syntaxiques LR (k) sont plus puissants que les analyseurs syntaxiques LL (k) . Ces déclarations sont vagues la plupart du temps; en particulier, devrions-nous comparer les classes pour un fixe ou l'union sur tous les k ? Alors, comment est la situation vraiment? En particulier, je m'intéresse à la place de LL (*).kk

Autant que je sache, les ensembles respectifs de grammaires que les analyseurs LL et LR acceptent sont orthogonaux. Parlons donc des langues générées par les ensembles respectifs de grammaires. Soit la classe de langages générés par les grammaires qui peuvent être analysés par un analyseur L R ( k ) et similaires pour les autres classes.LR(k)LR(k)

Je suis intéressé par les relations suivantes:

  • LL(k)?LR(k)
  • i=1LL(k)?i=1LR(k)
  • i=1LL(k)=?LL()
  • LL()?i=1LR(k)

Certaines sont probablement faciles; mon objectif est de collecter une comparaison "complète". Les références sont appréciées.

Raphaël
la source
2
Peut-être que cela peut vous aider! Image de la hiérarchie grammaticale
Andrea Tucci
1
@AndreaTucci: Oui, mais cela ne couvre que les grammaires, pas les langages générés.
Raphaël

Réponses:

61

Il existe de nombreux confinements connus. Laissez dénoter le confinement et confinement adéquat. Soit × une incomparabilité.×

Soit , L R = k L R ( k ) .LL=kLL(k)LR=kLR(k)

Niveau de grammaire

Pour 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)

La plupart d'entre elles ont fait leurs preuves dans les propriétés des grammaires déterministes descendantes de Rosenkrantz et Stearns. est un exercice plutôt trivial. Cette présentation par Terence Parr place L L ( * ) sur la diapositive 13. Le papier LL-grammaires régulière par Jarzabek et Krawczyk montrent L L L L R , et leur preuve étend trivialement à L L L L ( * )SLL(k+1)×LL(k)LL()LLLLRLLLL()

Pour 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

Ce sont tous des exercices simples.

LL versus LR

  • (Propriétés des grammaires déterministes descendantesplus une grammaire récursive gauche)LL(k)LR(k)
  • (exercice simple)LL(k)×SLR(k),LUNELR(k),LR(k-1)
  • (toute grammaire récursive gauche)LLLR
  • (récursivité de gauche par rapport au look arbitraire)LL(*)×LR

Niveau de langue

Pour LL

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

LL(k)LL(*)LLLLRLLLL(*)

Pour LR

  • LR(0)SLR(1)=LUNELR(1)=LR(1)=SLR(k)=LUNELR(k)=LR(k)=LR

Knuth en a prouvé quelques-unes dans son article Sur la traduction des langues de gauche à droite dans lequel il a introduit LR (k), les autres sont prouvées dans Transforming LR (k) Grammars to LR (1), SLR (1), et (1,1) Grammaires délimitées dans le contexte droit de Mickunas et al.

LL versus LR

  • LLLR(1){unejebj|jej}
  • LL(*)×LR{unejebj|jej}
  • LR(1)=CFL
Alex ten Brink
la source
Excellente réponse cependant, j'avais déjà voté. J'aurais pensé que Frank deRemer avait prouvé que LALR <= LR était dans son document original LALR? (1969?)
user207421
LUNELR(k)LR(k)LUNELRLR
1
@AlextenBrink J'ai lu le journal, mais Frank de Remer l'a enseigné, mais il y a plus de 30 ans ;-) Merci pour tous les détails.
user207421
Il serait peut-être intéressant de rassembler des exemples de grammaires pour chaque inégalité.
o11c
1
@ o11c Je pense que cela surchargerait une seule réponse. Mon impression est qu'Alex a donné de bonnes références au besoin. il dit "exercice facile" pour certains. Je suppose que si un lecteur ne peut pas proposer de grammaire, il peut poser une nouvelle question demandant ce cas particulier.
Raphaël