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=1∞LL(k)⊆?⋃i=1∞LR(k)
  • ⋃i=1∞LL(k)=?LL(∗)
  • LL(∗)∘?⋃i=1∞LR(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)⊂⋯⊂LL⊂LL(∗)
  • 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(∗)LL⊂LLRLL⊂LL(∗)

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(k−1) (esercizio semplice)
  • LL⊂LR (qualsiasi grammatica ricorsiva sinistra)
  • LL(∗)×LR (ricorsione sinistra contro lookahead arbitrario)

Livello di lingua

Per LL

  • LL(0)⊂LL(1)⊂LL(2)⊂⋯⊂LL(k)⊂⋯⊂LL⊂LL(∗)
  • 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(∗)LL⊂LLRLL⊂LL(∗)

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

  • LL⊂LR(1) (il contenimento segue da quanto sopra, è l'esempio canonico per contenimento rigoroso){aibj|i≥j}
  • 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|i≥j}
  • 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.