Confronto teorico linguistico delle grammatiche LL e LR


68

Le persone spesso dicono che i parser LR (k) sono più potenti dei parser LL (k) . Queste dichiarazioni sono vaghe per la maggior parte del tempo; in particolare, dovremmo confrontare le classi per un fisso o l'unione su tutto ? Allora, com'è davvero la situazione? In particolare, sono interessato a come si adatta LL (*).kk

Per quanto ne so, i rispettivi set di grammatiche che i parser LL e LR accettano sono ortogonali, quindi parliamo delle lingue generate dai rispettivi set di grammatiche. Lascia che denoti la classe di lingue generate da grammatiche che possono essere analizzate da un e simili per altre classi.LR(k)LR(k)

Sono interessato alle seguenti relazioni:

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

Alcuni di questi sono probabilmente facili; il mio obiettivo è quello di raccogliere un confronto "completo". I riferimenti sono apprezzati.


2
Forse questo può aiutarti! Immagine della gerarchia grammaticale
Andrea Tucci,

1
@AndreaTucci: Sì, ma copre solo le grammatiche, non le lingue generate.
Raffaello

Risposte:


61

Sono noti numerosi contenimenti. Lascia che denoti il ​​contenimento e il contenimento corretto. Let denota incomparabilità.×

Sia , .LL=kLL(k)LR=kLR(k)

Livello grammaticale

Per 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 maggior parte di questi sono comprovati nelle Proprietà delle grammatiche top down deterministiche di Rosenkrantz e Stearns. è un esercizio piuttosto banale. Questa presentazione di Terence Parr colloca sulla diapositiva 13. L'articolo grammatiche LL-regolari di Jarzabek e Krawczyk mostrano , e la loro prova si estende banalmente aSLL(k+1)×LL(k)LL()LLLLRLLLL()

Per 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

Questi sono tutti semplici esercizi.

LL contro LR

  • LL(k)LR(k) ( Proprietà delle grammatiche top-down deterministiche più qualsiasi grammatica ricorsiva a sinistra)
  • LL(k)×SLR(k),LALR(k),LR(k1) (esercizio semplice)
  • LLLR (qualsiasi grammatica ricorsiva sinistra)
  • LL()×LR (ricorsione sinistra contro lookahead arbitrario)

Livello di lingua

Per LL

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

La maggior parte di questi sono comprovati in Proprietà delle grammatiche top down deterministiche . Il problema dell'equivalenza per le grammatiche regolari LL e LR di Nijholt fa riferimento a documenti che mostrano . L'articolo grammatiche regolari LL di Jarzabek e Krawczyk mostrano , e la loro prova si estende banalmente aLL(k)LL()LLLLRLLLL()

Per LR

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

Alcuni di questi sono stati dimostrati da Knuth nel suo articolo Sulla traduzione delle lingue da sinistra a destra in cui ha introdotto LR (k), il resto è dimostrato in Transforming LR (k) Grammars to LR (1), SLR (1), e (1,1) Bounded Right-Context Grammars di Mickunas et al.

LL contro LR

  • LLLR(1) (il contenimento segue da quanto sopra, è l'esempio canonico per contenimento rigoroso){aibj|ij}
  • LL()×LR (la lingua mostra metà del reclamo, e l'introduzione di Il problema dell'equivalenza per le grammatiche regolari LL e LR di Nijholt fa riferimento a documenti mostrando l'altra metà){aibj|ij}
  • LR(1)=DCFL (vedere ad esempio riferimento qui ).

Ottima risposta però, avevo già votato. Avrei pensato che Frank deRemer avesse dimostrato LALR <= LR nel suo documento LALR originale? (1969?)
user207421

@EJP: è immediato se si definisce comprimendo gli stati . deRemer ha solo dimostrato che la sua costruzione ha creato lo stesso parser. Le lezioni di grammatica non sono uguali, il che è un buon esercizio (o anche una bella domanda per questo sito). L'uguaglianza della classe linguistica è molto più complicata: leggi l'articolo se vuoi davvero i dettagli;)LALR(k)LR(k)LALRLR
Alex ten Brink

1
@AlextenBrink Ho letto il giornale e mi è stato insegnato da Frank de Remer, ma sono passati più di 30 anni ;-) Grazie per tutti i dettagli.
user207421

Potrebbe essere utile raccogliere grammatiche di esempio per ciascuna disuguaglianza.
o11c,

1
@ o11c Penso che sovraccaricherebbe una sola risposta. La mia impressione è che Alex abbia fornito buone referenze ove necessario; egli afferma "esercizio facile" per alcuni. Immagino che se un lettore non riesce a elaborare una grammatica, può pubblicare una nuova domanda chiedendo quel caso specifico.
Raffaello
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.