Cvičenie3:Syntaktickáanalýzazhoranadol PeterKostolányi 24 ...kostolanyi/kompilatory/sl03.pdfkompil acie. Úloha syntaktickej analýzy pri tvorbe kompilátorov Prud vstupnyc h symbolov

Post on 24-Jan-2021

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

Transcript

Kompilátory

Cvičenie 3: Syntaktická analýza zhora nadol

Peter Kostolányi

24. októbra 2017

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:

I Odovzdáva sa mailomI Podrobné zadanie je na stránke predmetuI Za neskoré odovzdanie je penalizácia −10% z celkového bodového

zisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258I Rukou písané riešenia, prosím, odovzdajte osobneI Zadania sa objavia na stránke po tomto cvičeníI Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:I Odovzdáva sa mailom

I Podrobné zadanie je na stránke predmetuI Za neskoré odovzdanie je penalizácia −10% z celkového bodového

zisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258I Rukou písané riešenia, prosím, odovzdajte osobneI Zadania sa objavia na stránke po tomto cvičeníI Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:I Odovzdáva sa mailomI Podrobné zadanie je na stránke predmetu

I Za neskoré odovzdanie je penalizácia −10% z celkového bodovéhozisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258I Rukou písané riešenia, prosím, odovzdajte osobneI Zadania sa objavia na stránke po tomto cvičeníI Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:I Odovzdáva sa mailomI Podrobné zadanie je na stránke predmetuI Za neskoré odovzdanie je penalizácia −10% z celkového bodového

zisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258I Rukou písané riešenia, prosím, odovzdajte osobneI Zadania sa objavia na stránke po tomto cvičeníI Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:I Odovzdáva sa mailomI Podrobné zadanie je na stránke predmetuI Za neskoré odovzdanie je penalizácia −10% z celkového bodového

zisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:

I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258I Rukou písané riešenia, prosím, odovzdajte osobneI Zadania sa objavia na stránke po tomto cvičeníI Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:I Odovzdáva sa mailomI Podrobné zadanie je na stránke predmetuI Za neskoré odovzdanie je penalizácia −10% z celkového bodového

zisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258

I Rukou písané riešenia, prosím, odovzdajte osobneI Zadania sa objavia na stránke po tomto cvičeníI Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:I Odovzdáva sa mailomI Podrobné zadanie je na stránke predmetuI Za neskoré odovzdanie je penalizácia −10% z celkového bodového

zisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258I Rukou písané riešenia, prosím, odovzdajte osobne

I Zadania sa objavia na stránke po tomto cvičeníI Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:I Odovzdáva sa mailomI Podrobné zadanie je na stránke predmetuI Za neskoré odovzdanie je penalizácia −10% z celkového bodového

zisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258I Rukou písané riešenia, prosím, odovzdajte osobneI Zadania sa objavia na stránke po tomto cvičení

I Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:I Odovzdáva sa mailomI Podrobné zadanie je na stránke predmetuI Za neskoré odovzdanie je penalizácia −10% z celkového bodového

zisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258I Rukou písané riešenia, prosím, odovzdajte osobneI Zadania sa objavia na stránke po tomto cvičeníI Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)

I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Oznamy

Do 6. novembra 2017 treba odovzdať neformálnu špecifikáciu projektu:I Odovzdáva sa mailomI Podrobné zadanie je na stránke predmetuI Za neskoré odovzdanie je penalizácia −10% z celkového bodového

zisku z cvičení

Do 21. novembra 2017 treba odovzdať riešenia prvej sady domácich úloh:I Odovzdáva sa mailom, alebo osobne na cvičení resp. na M-258I Rukou písané riešenia, prosím, odovzdajte osobneI Zadania sa objavia na stránke po tomto cvičeníI Dve teoretické úlohy po 3 body (k témam z dnešného cvičenia)I 21. novembra bude zverejnená druhá (prakticky zameraná) sada úloh

Časť 1:

Základné princípy syntaktickej analýzy zhora nadol

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Syntaktický analyzátor (parser) pre jazyk generovaný gramatikou G :

I Číta prúd tokenov generovaný lexikálnym analyzátoromI Overuje, či vstupná postupnosť tokenov patrí do L(G )

I Ak áno: explicitne alebo implicitne skonštruuje strom odvodeniavstupnej postupnosti v G (niekedy stačí vykonať vhodné akcie)

I Ak nie: vyhlási vhodnú syntaktickú chybu a snaží sa z nej zotaviť

Gramatika G popisujúca vstupný jazyk je zvyčajne bezkontextová:I Vo viacznačných gramatikách môže mať jedno slovo viacero stromov

odvodeniaI Teoreticky významné triedy efektívne parsovateľných gramatík

(LL(k), LR(k), . . . ): len jednoznačné gramatikyI V praxi sa zídu aj viacznačné gramatiky s prioritami pravidiel

(väčšina parsovacích metód sa dá rozšíriť na takéto gramatiky)

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Syntaktický analyzátor (parser) pre jazyk generovaný gramatikou G :I Číta prúd tokenov generovaný lexikálnym analyzátorom

I Overuje, či vstupná postupnosť tokenov patrí do L(G )

I Ak áno: explicitne alebo implicitne skonštruuje strom odvodeniavstupnej postupnosti v G (niekedy stačí vykonať vhodné akcie)

I Ak nie: vyhlási vhodnú syntaktickú chybu a snaží sa z nej zotaviť

Gramatika G popisujúca vstupný jazyk je zvyčajne bezkontextová:I Vo viacznačných gramatikách môže mať jedno slovo viacero stromov

odvodeniaI Teoreticky významné triedy efektívne parsovateľných gramatík

(LL(k), LR(k), . . . ): len jednoznačné gramatikyI V praxi sa zídu aj viacznačné gramatiky s prioritami pravidiel

(väčšina parsovacích metód sa dá rozšíriť na takéto gramatiky)

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Syntaktický analyzátor (parser) pre jazyk generovaný gramatikou G :I Číta prúd tokenov generovaný lexikálnym analyzátoromI Overuje, či vstupná postupnosť tokenov patrí do L(G )

I Ak áno: explicitne alebo implicitne skonštruuje strom odvodeniavstupnej postupnosti v G (niekedy stačí vykonať vhodné akcie)

I Ak nie: vyhlási vhodnú syntaktickú chybu a snaží sa z nej zotaviť

Gramatika G popisujúca vstupný jazyk je zvyčajne bezkontextová:I Vo viacznačných gramatikách môže mať jedno slovo viacero stromov

odvodeniaI Teoreticky významné triedy efektívne parsovateľných gramatík

(LL(k), LR(k), . . . ): len jednoznačné gramatikyI V praxi sa zídu aj viacznačné gramatiky s prioritami pravidiel

(väčšina parsovacích metód sa dá rozšíriť na takéto gramatiky)

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Syntaktický analyzátor (parser) pre jazyk generovaný gramatikou G :I Číta prúd tokenov generovaný lexikálnym analyzátoromI Overuje, či vstupná postupnosť tokenov patrí do L(G )

I Ak áno: explicitne alebo implicitne skonštruuje strom odvodeniavstupnej postupnosti v G (niekedy stačí vykonať vhodné akcie)

I Ak nie: vyhlási vhodnú syntaktickú chybu a snaží sa z nej zotaviť

Gramatika G popisujúca vstupný jazyk je zvyčajne bezkontextová:I Vo viacznačných gramatikách môže mať jedno slovo viacero stromov

odvodeniaI Teoreticky významné triedy efektívne parsovateľných gramatík

(LL(k), LR(k), . . . ): len jednoznačné gramatikyI V praxi sa zídu aj viacznačné gramatiky s prioritami pravidiel

(väčšina parsovacích metód sa dá rozšíriť na takéto gramatiky)

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Syntaktický analyzátor (parser) pre jazyk generovaný gramatikou G :I Číta prúd tokenov generovaný lexikálnym analyzátoromI Overuje, či vstupná postupnosť tokenov patrí do L(G )

I Ak áno: explicitne alebo implicitne skonštruuje strom odvodeniavstupnej postupnosti v G (niekedy stačí vykonať vhodné akcie)

I Ak nie: vyhlási vhodnú syntaktickú chybu a snaží sa z nej zotaviť

Gramatika G popisujúca vstupný jazyk je zvyčajne bezkontextová:I Vo viacznačných gramatikách môže mať jedno slovo viacero stromov

odvodeniaI Teoreticky významné triedy efektívne parsovateľných gramatík

(LL(k), LR(k), . . . ): len jednoznačné gramatikyI V praxi sa zídu aj viacznačné gramatiky s prioritami pravidiel

(väčšina parsovacích metód sa dá rozšíriť na takéto gramatiky)

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Syntaktický analyzátor (parser) pre jazyk generovaný gramatikou G :I Číta prúd tokenov generovaný lexikálnym analyzátoromI Overuje, či vstupná postupnosť tokenov patrí do L(G )

I Ak áno: explicitne alebo implicitne skonštruuje strom odvodeniavstupnej postupnosti v G (niekedy stačí vykonať vhodné akcie)

I Ak nie: vyhlási vhodnú syntaktickú chybu a snaží sa z nej zotaviť

Gramatika G popisujúca vstupný jazyk je zvyčajne bezkontextová:

I Vo viacznačných gramatikách môže mať jedno slovo viacero stromovodvodenia

I Teoreticky významné triedy efektívne parsovateľných gramatík(LL(k), LR(k), . . . ): len jednoznačné gramatiky

I V praxi sa zídu aj viacznačné gramatiky s prioritami pravidiel(väčšina parsovacích metód sa dá rozšíriť na takéto gramatiky)

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Syntaktický analyzátor (parser) pre jazyk generovaný gramatikou G :I Číta prúd tokenov generovaný lexikálnym analyzátoromI Overuje, či vstupná postupnosť tokenov patrí do L(G )

I Ak áno: explicitne alebo implicitne skonštruuje strom odvodeniavstupnej postupnosti v G (niekedy stačí vykonať vhodné akcie)

I Ak nie: vyhlási vhodnú syntaktickú chybu a snaží sa z nej zotaviť

Gramatika G popisujúca vstupný jazyk je zvyčajne bezkontextová:I Vo viacznačných gramatikách môže mať jedno slovo viacero stromov

odvodenia

I Teoreticky významné triedy efektívne parsovateľných gramatík(LL(k), LR(k), . . . ): len jednoznačné gramatiky

I V praxi sa zídu aj viacznačné gramatiky s prioritami pravidiel(väčšina parsovacích metód sa dá rozšíriť na takéto gramatiky)

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Syntaktický analyzátor (parser) pre jazyk generovaný gramatikou G :I Číta prúd tokenov generovaný lexikálnym analyzátoromI Overuje, či vstupná postupnosť tokenov patrí do L(G )

I Ak áno: explicitne alebo implicitne skonštruuje strom odvodeniavstupnej postupnosti v G (niekedy stačí vykonať vhodné akcie)

I Ak nie: vyhlási vhodnú syntaktickú chybu a snaží sa z nej zotaviť

Gramatika G popisujúca vstupný jazyk je zvyčajne bezkontextová:I Vo viacznačných gramatikách môže mať jedno slovo viacero stromov

odvodeniaI Teoreticky významné triedy efektívne parsovateľných gramatík

(LL(k), LR(k), . . . ): len jednoznačné gramatiky

I V praxi sa zídu aj viacznačné gramatiky s prioritami pravidiel(väčšina parsovacích metód sa dá rozšíriť na takéto gramatiky)

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Syntaktický analyzátor (parser) pre jazyk generovaný gramatikou G :I Číta prúd tokenov generovaný lexikálnym analyzátoromI Overuje, či vstupná postupnosť tokenov patrí do L(G )

I Ak áno: explicitne alebo implicitne skonštruuje strom odvodeniavstupnej postupnosti v G (niekedy stačí vykonať vhodné akcie)

I Ak nie: vyhlási vhodnú syntaktickú chybu a snaží sa z nej zotaviť

Gramatika G popisujúca vstupný jazyk je zvyčajne bezkontextová:I Vo viacznačných gramatikách môže mať jedno slovo viacero stromov

odvodeniaI Teoreticky významné triedy efektívne parsovateľných gramatík

(LL(k), LR(k), . . . ): len jednoznačné gramatikyI V praxi sa zídu aj viacznačné gramatiky s prioritami pravidiel

(väčšina parsovacích metód sa dá rozšíriť na takéto gramatiky)

Syntaktická analýza zhora nadol

Explicitná alebo implicitná konštrukcia stromu odvodenia, ktorá:

I Začína v koreni (počiatočný neterminál)I Postupne vytvára ďalšie uzly stromu smerom nadol až k jeho listom

(„prehľadávaním do hĺbky“)

Syntaktická analýza zhora nadol

Explicitná alebo implicitná konštrukcia stromu odvodenia, ktorá:I Začína v koreni (počiatočný neterminál)

I Postupne vytvára ďalšie uzly stromu smerom nadol až k jeho listom(„prehľadávaním do hĺbky“)

Syntaktická analýza zhora nadol

Explicitná alebo implicitná konštrukcia stromu odvodenia, ktorá:I Začína v koreni (počiatočný neterminál)I Postupne vytvára ďalšie uzly stromu smerom nadol až k jeho listom

(„prehľadávaním do hĺbky“)

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

ε

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

ε

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

ε

a a β

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

ε

a a β

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

ε

a a β

β b

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

ε

a a β

β b

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

ε

a a β

β b

ε

Syntaktická analýza zhora nadol (príklad)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → αcβ | βdαα→ aα | bbα | εβ → aaβ | βb | ε

Konštrukcia syntaktického stromu k slovu aabbacaab:

σ

α c β

αa

αa

b b α

αa

ε

a a β

β b

ε

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

σStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

σStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

σStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

σStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

σStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

b

b

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

b

b

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

b

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

b

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

α

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

c

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

a

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

a

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

a

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

βStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

bStav: q0

Riadiaca jednotka

a a a a ab b bc

β

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

bStav: q0

Riadiaca jednotka

a a a a ab b bc

β

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

bStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

bStav: q0

Riadiaca jednotka

a a a a ab b bc

Syntaktická analýza zhora nadol

I Doposiaľ nejde o algoritmus, ale len o nedeterministickú schémualgoritmu

I Dá sa implementovať na (nedeterministickom) zásobníkovomautomate

I Štandardná konštrukcia automatu k ľubovoľnej bezkontextovejgramatike

Stav: q0

Riadiaca jednotka

a a a a ab b bc

ACCEPT

Metóda rekurzívneho zostupu

I Uvedenú nedeterministickú schému je potrebné determinizovať

Metóda rekurzívneho zostupu:I Úplné prehľadávanie cez všetky možné voľby pravidielI Exponenciálna časová zložitosťI Ľavá rekurzia (α⇒+ αw pre nejaký neterminál α a slovo w) môže

spôsobiť nekonečný cyklusI Pre gramatiky bez ľavej rekurzie túto metódu možno použiť, ale je

neefektívna

Metóda rekurzívneho zostupu

I Uvedenú nedeterministickú schému je potrebné determinizovať

Metóda rekurzívneho zostupu:

I Úplné prehľadávanie cez všetky možné voľby pravidielI Exponenciálna časová zložitosťI Ľavá rekurzia (α⇒+ αw pre nejaký neterminál α a slovo w) môže

spôsobiť nekonečný cyklusI Pre gramatiky bez ľavej rekurzie túto metódu možno použiť, ale je

neefektívna

Metóda rekurzívneho zostupu

I Uvedenú nedeterministickú schému je potrebné determinizovať

Metóda rekurzívneho zostupu:I Úplné prehľadávanie cez všetky možné voľby pravidiel

I Exponenciálna časová zložitosťI Ľavá rekurzia (α⇒+ αw pre nejaký neterminál α a slovo w) môže

spôsobiť nekonečný cyklusI Pre gramatiky bez ľavej rekurzie túto metódu možno použiť, ale je

neefektívna

Metóda rekurzívneho zostupu

I Uvedenú nedeterministickú schému je potrebné determinizovať

Metóda rekurzívneho zostupu:I Úplné prehľadávanie cez všetky možné voľby pravidielI Exponenciálna časová zložitosť

I Ľavá rekurzia (α⇒+ αw pre nejaký neterminál α a slovo w) môžespôsobiť nekonečný cyklus

I Pre gramatiky bez ľavej rekurzie túto metódu možno použiť, ale jeneefektívna

Metóda rekurzívneho zostupu

I Uvedenú nedeterministickú schému je potrebné determinizovať

Metóda rekurzívneho zostupu:I Úplné prehľadávanie cez všetky možné voľby pravidielI Exponenciálna časová zložitosťI Ľavá rekurzia (α⇒+ αw pre nejaký neterminál α a slovo w) môže

spôsobiť nekonečný cyklus

I Pre gramatiky bez ľavej rekurzie túto metódu možno použiť, ale jeneefektívna

Metóda rekurzívneho zostupu

I Uvedenú nedeterministickú schému je potrebné determinizovať

Metóda rekurzívneho zostupu:I Úplné prehľadávanie cez všetky možné voľby pravidielI Exponenciálna časová zložitosťI Ľavá rekurzia (α⇒+ αw pre nejaký neterminál α a slovo w) môže

spôsobiť nekonečný cyklusI Pre gramatiky bez ľavej rekurzie túto metódu možno použiť, ale je

neefektívna

Prediktívne parsovanie

I Trieda determinizácií, pre ktoré výsledný algoritmus (zvyčajne)pracuje v lineárnom čase

I Rekurzívny zostup bez potreby úplného prehľadávaniaI Iba pre určité obmedzené (často ale postačujúce) triedy gramatíkI Základná myšlienka: pre každý neterminál ξ by sa na základe nejakej

informácie o zvyšku vstupu (napríklad prvých k písmen) malo daťjednoznačne vybrať nasledujúce pravidlo ξ → x

I Napríklad SLL(k) gramatiky alebo LL(k) gramatiky

Prediktívne parsovanie

I Trieda determinizácií, pre ktoré výsledný algoritmus (zvyčajne)pracuje v lineárnom čase

I Rekurzívny zostup bez potreby úplného prehľadávania

I Iba pre určité obmedzené (často ale postačujúce) triedy gramatíkI Základná myšlienka: pre každý neterminál ξ by sa na základe nejakej

informácie o zvyšku vstupu (napríklad prvých k písmen) malo daťjednoznačne vybrať nasledujúce pravidlo ξ → x

I Napríklad SLL(k) gramatiky alebo LL(k) gramatiky

Prediktívne parsovanie

I Trieda determinizácií, pre ktoré výsledný algoritmus (zvyčajne)pracuje v lineárnom čase

I Rekurzívny zostup bez potreby úplného prehľadávaniaI Iba pre určité obmedzené (často ale postačujúce) triedy gramatík

I Základná myšlienka: pre každý neterminál ξ by sa na základe nejakejinformácie o zvyšku vstupu (napríklad prvých k písmen) malo daťjednoznačne vybrať nasledujúce pravidlo ξ → x

I Napríklad SLL(k) gramatiky alebo LL(k) gramatiky

Prediktívne parsovanie

I Trieda determinizácií, pre ktoré výsledný algoritmus (zvyčajne)pracuje v lineárnom čase

I Rekurzívny zostup bez potreby úplného prehľadávaniaI Iba pre určité obmedzené (často ale postačujúce) triedy gramatíkI Základná myšlienka: pre každý neterminál ξ by sa na základe nejakej

informácie o zvyšku vstupu (napríklad prvých k písmen) malo daťjednoznačne vybrať nasledujúce pravidlo ξ → x

I Napríklad SLL(k) gramatiky alebo LL(k) gramatiky

Prediktívne parsovanie

I Trieda determinizácií, pre ktoré výsledný algoritmus (zvyčajne)pracuje v lineárnom čase

I Rekurzívny zostup bez potreby úplného prehľadávaniaI Iba pre určité obmedzené (často ale postačujúce) triedy gramatíkI Základná myšlienka: pre každý neterminál ξ by sa na základe nejakej

informácie o zvyšku vstupu (napríklad prvých k písmen) malo daťjednoznačne vybrať nasledujúce pravidlo ξ → x

I Napríklad SLL(k) gramatiky alebo LL(k) gramatiky

Časť 2:

SLL(k) a LL(k) gramatiky

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:

I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupeI „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):I LL(k): Left-to-right, Leftmost derivation, k-lookaheadI SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísať

I Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupeI „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):I LL(k): Left-to-right, Leftmost derivation, k-lookaheadI SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupeI „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):I LL(k): Left-to-right, Leftmost derivation, k-lookaheadI SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:

I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupeI „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):I LL(k): Left-to-right, Leftmost derivation, k-lookaheadI SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísať

I Nasledujúcimi k neprečítanými symbolmi na vstupeI „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):I LL(k): Left-to-right, Leftmost derivation, k-lookaheadI SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

I „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):I LL(k): Left-to-right, Leftmost derivation, k-lookaheadI SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupeI „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):I LL(k): Left-to-right, Leftmost derivation, k-lookaheadI SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupeI „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):

I LL(k): Left-to-right, Leftmost derivation, k-lookaheadI SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupeI „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):I LL(k): Left-to-right, Leftmost derivation, k-lookahead

I SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Myšlienka SLL(k) a LL(k) gramatík

Pri SLL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupe

Pri LL(k) gramatikách je nasledujúce pravidlo jednoznačne určené:I Neterminálom, ktorý sa má prepísaťI Nasledujúcimi k neprečítanými symbolmi na vstupeI „Doterajším priebehom výpočtu parsovacieho algoritmu“

Pôvod pomenovania LL(k) resp. SLL(k):I LL(k): Left-to-right, Leftmost derivation, k-lookaheadI SLL(k): Strong-LL(k); silnejšia je podmienka, nie gramatika

Množiny FIRSTk(x) a FOLLOWk(x)

I Nech w = a1a2 . . . an, kde a1, . . . , an sú symboly

I Nech k je prirodzené číslo

k:w =

{w ak |w | ≤ ka1 . . . ak ak |w | > k

Nech G = (N,T ,P, σ) je gramatika a x ∈ (N ∪ T )∗ je slovo:I FIRSTG

k (x) = {k:w | w ∈ T ∗; x ⇒∗ w}I FOLLOWG

k (x) =⋃

w∈T∗,z∈(N∪T )∗

σ⇒∗lmwxz

FIRSTGk (z)

I Zvyčajne píšeme iba FIRSTk(x) resp. FOLLOWk(x)I Prirodzené rozšírenie na FIRSTk(L) resp. FOLLOWk(L) pre

L ⊆ (N ∪ T )∗

I Trochu iná notácia ako pri jednoducho precedenčných gramatikách(Formálne jazyky a automaty 2)

Množiny FIRSTk(x) a FOLLOWk(x)

I Nech w = a1a2 . . . an, kde a1, . . . , an sú symbolyI Nech k je prirodzené číslo

k:w =

{w ak |w | ≤ ka1 . . . ak ak |w | > k

Nech G = (N,T ,P, σ) je gramatika a x ∈ (N ∪ T )∗ je slovo:I FIRSTG

k (x) = {k:w | w ∈ T ∗; x ⇒∗ w}I FOLLOWG

k (x) =⋃

w∈T∗,z∈(N∪T )∗

σ⇒∗lmwxz

FIRSTGk (z)

I Zvyčajne píšeme iba FIRSTk(x) resp. FOLLOWk(x)I Prirodzené rozšírenie na FIRSTk(L) resp. FOLLOWk(L) pre

L ⊆ (N ∪ T )∗

I Trochu iná notácia ako pri jednoducho precedenčných gramatikách(Formálne jazyky a automaty 2)

Množiny FIRSTk(x) a FOLLOWk(x)

I Nech w = a1a2 . . . an, kde a1, . . . , an sú symbolyI Nech k je prirodzené číslo

k:w =

{w ak |w | ≤ ka1 . . . ak ak |w | > k

Nech G = (N,T ,P, σ) je gramatika a x ∈ (N ∪ T )∗ je slovo:I FIRSTG

k (x) = {k:w | w ∈ T ∗; x ⇒∗ w}I FOLLOWG

k (x) =⋃

w∈T∗,z∈(N∪T )∗

σ⇒∗lmwxz

FIRSTGk (z)

I Zvyčajne píšeme iba FIRSTk(x) resp. FOLLOWk(x)I Prirodzené rozšírenie na FIRSTk(L) resp. FOLLOWk(L) pre

L ⊆ (N ∪ T )∗

I Trochu iná notácia ako pri jednoducho precedenčných gramatikách(Formálne jazyky a automaty 2)

Množiny FIRSTk(x) a FOLLOWk(x)

I Nech w = a1a2 . . . an, kde a1, . . . , an sú symbolyI Nech k je prirodzené číslo

k:w =

{w ak |w | ≤ ka1 . . . ak ak |w | > k

Nech G = (N,T ,P, σ) je gramatika a x ∈ (N ∪ T )∗ je slovo:

I FIRSTGk (x) = {k:w | w ∈ T ∗; x ⇒∗ w}

I FOLLOWGk (x) =

⋃w∈T∗,z∈(N∪T )∗

σ⇒∗lmwxz

FIRSTGk (z)

I Zvyčajne píšeme iba FIRSTk(x) resp. FOLLOWk(x)I Prirodzené rozšírenie na FIRSTk(L) resp. FOLLOWk(L) pre

L ⊆ (N ∪ T )∗

I Trochu iná notácia ako pri jednoducho precedenčných gramatikách(Formálne jazyky a automaty 2)

Množiny FIRSTk(x) a FOLLOWk(x)

I Nech w = a1a2 . . . an, kde a1, . . . , an sú symbolyI Nech k je prirodzené číslo

k:w =

{w ak |w | ≤ ka1 . . . ak ak |w | > k

Nech G = (N,T ,P, σ) je gramatika a x ∈ (N ∪ T )∗ je slovo:I FIRSTG

k (x) = {k:w | w ∈ T ∗; x ⇒∗ w}

I FOLLOWGk (x) =

⋃w∈T∗,z∈(N∪T )∗

σ⇒∗lmwxz

FIRSTGk (z)

I Zvyčajne píšeme iba FIRSTk(x) resp. FOLLOWk(x)I Prirodzené rozšírenie na FIRSTk(L) resp. FOLLOWk(L) pre

L ⊆ (N ∪ T )∗

I Trochu iná notácia ako pri jednoducho precedenčných gramatikách(Formálne jazyky a automaty 2)

Množiny FIRSTk(x) a FOLLOWk(x)

I Nech w = a1a2 . . . an, kde a1, . . . , an sú symbolyI Nech k je prirodzené číslo

k:w =

{w ak |w | ≤ ka1 . . . ak ak |w | > k

Nech G = (N,T ,P, σ) je gramatika a x ∈ (N ∪ T )∗ je slovo:I FIRSTG

k (x) = {k:w | w ∈ T ∗; x ⇒∗ w}I FOLLOWG

k (x) =⋃

w∈T∗,z∈(N∪T )∗

σ⇒∗lmwxz

FIRSTGk (z)

I Zvyčajne píšeme iba FIRSTk(x) resp. FOLLOWk(x)I Prirodzené rozšírenie na FIRSTk(L) resp. FOLLOWk(L) pre

L ⊆ (N ∪ T )∗

I Trochu iná notácia ako pri jednoducho precedenčných gramatikách(Formálne jazyky a automaty 2)

Množiny FIRSTk(x) a FOLLOWk(x)

I Nech w = a1a2 . . . an, kde a1, . . . , an sú symbolyI Nech k je prirodzené číslo

k:w =

{w ak |w | ≤ ka1 . . . ak ak |w | > k

Nech G = (N,T ,P, σ) je gramatika a x ∈ (N ∪ T )∗ je slovo:I FIRSTG

k (x) = {k:w | w ∈ T ∗; x ⇒∗ w}I FOLLOWG

k (x) =⋃

w∈T∗,z∈(N∪T )∗

σ⇒∗lmwxz

FIRSTGk (z)

I Zvyčajne píšeme iba FIRSTk(x) resp. FOLLOWk(x)

I Prirodzené rozšírenie na FIRSTk(L) resp. FOLLOWk(L) preL ⊆ (N ∪ T )∗

I Trochu iná notácia ako pri jednoducho precedenčných gramatikách(Formálne jazyky a automaty 2)

Množiny FIRSTk(x) a FOLLOWk(x)

I Nech w = a1a2 . . . an, kde a1, . . . , an sú symbolyI Nech k je prirodzené číslo

k:w =

{w ak |w | ≤ ka1 . . . ak ak |w | > k

Nech G = (N,T ,P, σ) je gramatika a x ∈ (N ∪ T )∗ je slovo:I FIRSTG

k (x) = {k:w | w ∈ T ∗; x ⇒∗ w}I FOLLOWG

k (x) =⋃

w∈T∗,z∈(N∪T )∗

σ⇒∗lmwxz

FIRSTGk (z)

I Zvyčajne píšeme iba FIRSTk(x) resp. FOLLOWk(x)I Prirodzené rozšírenie na FIRSTk(L) resp. FOLLOWk(L) pre

L ⊆ (N ∪ T )∗

I Trochu iná notácia ako pri jednoducho precedenčných gramatikách(Formálne jazyky a automaty 2)

Množiny FIRSTk(x) a FOLLOWk(x)

I Nech w = a1a2 . . . an, kde a1, . . . , an sú symbolyI Nech k je prirodzené číslo

k:w =

{w ak |w | ≤ ka1 . . . ak ak |w | > k

Nech G = (N,T ,P, σ) je gramatika a x ∈ (N ∪ T )∗ je slovo:I FIRSTG

k (x) = {k:w | w ∈ T ∗; x ⇒∗ w}I FOLLOWG

k (x) =⋃

w∈T∗,z∈(N∪T )∗

σ⇒∗lmwxz

FIRSTGk (z)

I Zvyčajne píšeme iba FIRSTk(x) resp. FOLLOWk(x)I Prirodzené rozšírenie na FIRSTk(L) resp. FOLLOWk(L) pre

L ⊆ (N ∪ T )∗

I Trochu iná notácia ako pri jednoducho precedenčných gramatikách(Formálne jazyky a automaty 2)

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ NI a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N

I a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ NI a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ NI a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ NI a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ NI a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,

I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ NI a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ NI a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ NI a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

SLL(k) a LL(k) gramatiky

DefiníciaSLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ NI a všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

platí FIRSTk(x1FOLLOWk(ξ)) ∩ FIRSTk(x2FOLLOWk(ξ)) = ∅.

DefiníciaLL(k) gramatika je bezkontextová gramatika G = (N,T ,P, σ) taká, že

I pre všetky neterminály ξ ∈ N,I všetky dvojice pravidiel ξ → x1, ξ → x2 ∈ P, kde x1 6= x2

I a všetky odvodenia σ ⇒∗lm wξz, kde w ∈ T ∗ a z ∈ (N ∪ T )∗

platí FIRSTk(x1z) ∩ FIRSTk(x2z) = ∅.

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:

I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}

I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}

I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅

I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}

I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}

I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅

I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)

I Podobne pre všetky gramatiky také, že pre každý neterminál ξzačínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad SLL(1) gramatiky

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aa | bσααα→ aασ | b

Zrejme platí:I FIRST1(aaFOLLOW1(σ)) = {a}I FIRST1(bσααFOLLOW1(σ)) = {b}I {a} ∩ {b} = ∅I FIRST1(aασFOLLOW1(α)) = {a}I FIRST1(bFOLLOW1(α)) = {b}I {a} ∩ {b} = ∅I Gramatika je teda SLL(1)I Podobne pre všetky gramatiky také, že pre každý neterminál ξ

začínajú pravé strany pravidiel zo ξ po dvoch rôznymi terminálmi(ak zvyšok pravej strany pozostáva z neterminálov: s-gramatiky)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:I FIRST1(aaαab) = {a}I FIRST1(εab) = {a}I {a} ∩ {a} 6= ∅I Gramatika nie je LL(1)I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:I FIRST1(aaαab) = {a}I FIRST1(εab) = {a}I {a} ∩ {a} 6= ∅I Gramatika nie je LL(1)I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:I FIRST1(aaαab) = {a}I FIRST1(εab) = {a}I {a} ∩ {a} 6= ∅I Gramatika nie je LL(1)I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:I FIRST1(aaαab) = {a}I FIRST1(εab) = {a}I {a} ∩ {a} 6= ∅I Gramatika nie je LL(1)I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:

I FIRST1(aaαab) = {a}I FIRST1(εab) = {a}I {a} ∩ {a} 6= ∅I Gramatika nie je LL(1)I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:I FIRST1(aaαab) = {a}

I FIRST1(εab) = {a}I {a} ∩ {a} 6= ∅I Gramatika nie je LL(1)I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:I FIRST1(aaαab) = {a}I FIRST1(εab) = {a}

I {a} ∩ {a} 6= ∅I Gramatika nie je LL(1)I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:I FIRST1(aaαab) = {a}I FIRST1(εab) = {a}I {a} ∩ {a} 6= ∅

I Gramatika nie je LL(1)I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:I FIRST1(aaαab) = {a}I FIRST1(εab) = {a}I {a} ∩ {a} 6= ∅I Gramatika nie je LL(1)

I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

Príklad gramatiky, ktorá nie je LL(1)

Uvažujme bezkontextovú gramatiku s nasledujúcimi pravidlami:

σ → aaα | εα→ σab | b

V tejto gramatike existuje napríklad nasledujúce odvodenie:

σ ⇒lm aaα⇒lm aaσab

Platí:I FIRST1(aaαab) = {a}I FIRST1(εab) = {a}I {a} ∩ {a} 6= ∅I Gramatika nie je LL(1)I Gramatika je SLL(2), a teda aj LL(2) (cvičenie)

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatika

I Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ PI Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatika

I Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)Keďže G nie je SLL(1):

I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ P

I Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ PI Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):

I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ P

I Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ P

I Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ PI Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ PI Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ PI Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ PI Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ PI Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššie

I V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ PI Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(1) vs. LL(1) na úrovni gramatík

I Každá SLL(k) gramatika je očividne aj LL(k) gramatikaI Ukážeme, že každá LL(1) gramatika je súčasne aj SLL(1) gramatikaI Sporom, nech G = (N,T ,P, σ) je LL(1), ale nie je SLL(1)

Keďže G nie je SLL(1):I FIRST1(x1FOLLOW1(ξ)) ∩ FIRST1(x2FOLLOW1(ξ)) 6= ∅

pre nejakú dvojicu rôznych pravidiel ξ → x1, ξ → x2 ∈ PI Nutne FOLLOW1(ξ) 6= ∅; existuje teda aspoň 1 odvodenieσ ⇒∗lm wξz , kde w ∈ T ∗ a z ∈ (N ∪ T )∗ je „terminujúce“

I Ak x1 ⇒∗ ε a x2 ⇒∗ ε, tak(FIRST1(x1z) ∩ FIRST1(x2z)) ⊇ FIRST1(z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 6⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅, a tedaaj FIRST1(x1z) ∩ FIRST1(x2z) 6= ∅: spor

I Ak x1 6⇒∗ ε a x2 ⇒∗ ε, tak FIRST1(x1) ∩ FIRST1(x2) 6= ∅ aleboFIRST1(x1) ∩ FOLLOW1(ξ) 6= ∅

I V prvom prípade dostávame spor rovnako ako vyššieI V druhom prípade existuje w ′ ∈ T ∗ a z ′ ∈ (N ∪ T )∗ tak, žeσ ⇒∗lm w ′ξz ′ a FIRST1(x1z ′) ∩ FIRST1(x2z ′) 6= ∅: spor

I Ak x1 ⇒∗ ε a x2 6⇒∗ ε, argumentácia je symetrická

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“

Zjavne existujú iba dve vetné formy v G obsahujúce α:I σ ⇒lm aαab

I FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαab

I FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}

I {aa} ∩ {ab} = ∅I σ ⇒lm bαbb

I FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbb

I FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}

I {ab} ∩ {bb} = ∅I Gramatika je LL(2)

Zjavne ale tiež:I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)

Zjavne ale tiež:I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}

I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}

I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}

I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅

I Gramatika nie je SLL(2)

SLL(2) vs. LL(2) na úrovni gramatík

Uvažujme bezkontextovú gramatiku G s nasledujúcimi pravidlami:

σ → aαab | bαbbα→ a | ε

I Neterminál σ očividne „nebude robiť problémy“Zjavne existujú iba dve vetné formy v G obsahujúce α:

I σ ⇒lm aαabI FIRST2(aab) = {aa}, FIRST2(εab) = {ab}I {aa} ∩ {ab} = ∅

I σ ⇒lm bαbbI FIRST(abb) = {ab}, FIRST(εbb) = {bb}I {ab} ∩ {bb} = ∅

I Gramatika je LL(2)Zjavne ale tiež:

I FOLLOW2(α) = {ab, bb}I FIRST2(aFOLLOW2(α)) = {aa, ab}I FIRST2(εFOLLOW2(α)) = {ab, bb}I {aa, ab} ∩ {ab, bb} 6= ∅I Gramatika nie je SLL(2)

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:

I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:

I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))(ak také pravidlo existuje)

I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)

I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistuje

I T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:

I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníkaa prečítaj c zo vstupu

I Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupu

I Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptuj

I Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξ

I Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstup

I Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Parsovanie SLL(k) gramatík

Bez dôkazu budeme využívať fakt, že:I Množiny FIRSTk(x) a FOLLOWk(x) sú efektívne skonštruovateľné

Pre každé ξ ∈ N a u ∈ T≤k , nech T (ξ, u) je:I Jediné pravidlo ξ → x také, že u ∈ FIRSTk(x FOLLOWk(ξ))

(ak také pravidlo existuje)I Nedefinovaná hodnota, ak také pravidlo neexistujeI T (·, ·) – parsovacia tabuľka

Parsovací algoritmus:I Ak je na vrchu zásobníka terminál c , vymaž ho zo zásobníka

a prečítaj c zo vstupuI Ak je zásobník prázdny, akceptujI Inak musí byť na vrchu zásobníka neterminál ξI Nech u = k:w , kde w je nedočítaný vstupI Vymaž ξ a nahraď ho reverzom pravej strany pravidla T (ξ, u)

Parsovanie LL(k) gramatík je o niečo komplikovanejšie

Porovnania na úrovni generovaných jazykov

Uveďme len dve tvrdenia bez dôkazu:

VetaJazyk L je generovaný LL(k) gramatikou práve vtedy, keď je generovanýSLL(k) gramatikou.

VetaPre každé k existuje jazyk Lk , ktorý je generovaný LL(k + 1) gramatikou,ale nie je generovaný LL(k) gramatikou.

Porovnania na úrovni generovaných jazykov

Uveďme len dve tvrdenia bez dôkazu:

VetaJazyk L je generovaný LL(k) gramatikou práve vtedy, keď je generovanýSLL(k) gramatikou.

VetaPre každé k existuje jazyk Lk , ktorý je generovaný LL(k + 1) gramatikou,ale nie je generovaný LL(k) gramatikou.

Porovnania na úrovni generovaných jazykov

Uveďme len dve tvrdenia bez dôkazu:

VetaJazyk L je generovaný LL(k) gramatikou práve vtedy, keď je generovanýSLL(k) gramatikou.

VetaPre každé k existuje jazyk Lk , ktorý je generovaný LL(k + 1) gramatikou,ale nie je generovaný LL(k) gramatikou.

Odkazy na literatúru

V nasledujúcich knihách možno nájsť vynechané detaily:

I Aho, A. V., Ullman, J. D.:The Theory of Parsing, Translation, and Compiling, vol. IEnglewood Cliffs : Prentice Hall, 1972.

I Aho, A. V., Ullman, J. D.:The Theory of Parsing, Translation, and Compiling, vol. IIEnglewood Cliffs : Prentice Hall, 1973.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IBerlin, Heidelberg : Springer, 1988.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IIBerlin, Heidelberg : Springer, 1990.

Odkazy na literatúru

V nasledujúcich knihách možno nájsť vynechané detaily:I Aho, A. V., Ullman, J. D.:

The Theory of Parsing, Translation, and Compiling, vol. IEnglewood Cliffs : Prentice Hall, 1972.

I Aho, A. V., Ullman, J. D.:The Theory of Parsing, Translation, and Compiling, vol. IIEnglewood Cliffs : Prentice Hall, 1973.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IBerlin, Heidelberg : Springer, 1988.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IIBerlin, Heidelberg : Springer, 1990.

Odkazy na literatúru

V nasledujúcich knihách možno nájsť vynechané detaily:I Aho, A. V., Ullman, J. D.:

The Theory of Parsing, Translation, and Compiling, vol. IEnglewood Cliffs : Prentice Hall, 1972.

I Aho, A. V., Ullman, J. D.:The Theory of Parsing, Translation, and Compiling, vol. IIEnglewood Cliffs : Prentice Hall, 1973.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IBerlin, Heidelberg : Springer, 1988.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IIBerlin, Heidelberg : Springer, 1990.

Odkazy na literatúru

V nasledujúcich knihách možno nájsť vynechané detaily:I Aho, A. V., Ullman, J. D.:

The Theory of Parsing, Translation, and Compiling, vol. IEnglewood Cliffs : Prentice Hall, 1972.

I Aho, A. V., Ullman, J. D.:The Theory of Parsing, Translation, and Compiling, vol. IIEnglewood Cliffs : Prentice Hall, 1973.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IBerlin, Heidelberg : Springer, 1988.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IIBerlin, Heidelberg : Springer, 1990.

Odkazy na literatúru

V nasledujúcich knihách možno nájsť vynechané detaily:I Aho, A. V., Ullman, J. D.:

The Theory of Parsing, Translation, and Compiling, vol. IEnglewood Cliffs : Prentice Hall, 1972.

I Aho, A. V., Ullman, J. D.:The Theory of Parsing, Translation, and Compiling, vol. IIEnglewood Cliffs : Prentice Hall, 1973.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IBerlin, Heidelberg : Springer, 1988.

I Sippu, S., Soisalon-Soininen, E.:Parsing Theory, vol. IIBerlin, Heidelberg : Springer, 1990.

Časť 3:

Nutné podmienky na splnenie definície LL(k) gramatík

Motivácia

I Existujú (aj jednoznačné) bezkontextové jazyky, ktoré nie súgenerované LL(k) gramatikou pre žiadne k

I V praxi často stačí málo na transformáciu „zlej“ gramatiky na„dobrú“

I Pri návrhu programovacích jazykov sa objavujú určité „typicképroblematické konštrukcie“

I Neprítomnosť týchto „problematických konštrukcií“ v gramatike jenutnou podmienkou splnenia definície LL(k) gramatiky (a často ajaplikovateľnosti iných metód syntaktickej analýzy zhora nadol)

Motivácia

I Existujú (aj jednoznačné) bezkontextové jazyky, ktoré nie súgenerované LL(k) gramatikou pre žiadne k

I V praxi často stačí málo na transformáciu „zlej“ gramatiky na„dobrú“

I Pri návrhu programovacích jazykov sa objavujú určité „typicképroblematické konštrukcie“

I Neprítomnosť týchto „problematických konštrukcií“ v gramatike jenutnou podmienkou splnenia definície LL(k) gramatiky (a často ajaplikovateľnosti iných metód syntaktickej analýzy zhora nadol)

Motivácia

I Existujú (aj jednoznačné) bezkontextové jazyky, ktoré nie súgenerované LL(k) gramatikou pre žiadne k

I V praxi často stačí málo na transformáciu „zlej“ gramatiky na„dobrú“

I Pri návrhu programovacích jazykov sa objavujú určité „typicképroblematické konštrukcie“

I Neprítomnosť týchto „problematických konštrukcií“ v gramatike jenutnou podmienkou splnenia definície LL(k) gramatiky (a často ajaplikovateľnosti iných metód syntaktickej analýzy zhora nadol)

Motivácia

I Existujú (aj jednoznačné) bezkontextové jazyky, ktoré nie súgenerované LL(k) gramatikou pre žiadne k

I V praxi často stačí málo na transformáciu „zlej“ gramatiky na„dobrú“

I Pri návrhu programovacích jazykov sa objavujú určité „typicképroblematické konštrukcie“

I Neprítomnosť týchto „problematických konštrukcií“ v gramatike jenutnou podmienkou splnenia definície LL(k) gramatiky (a často ajaplikovateľnosti iných metód syntaktickej analýzy zhora nadol)

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:

I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξxI Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξxI Musí existovať aj nejaké pravidlo ξ → y , kde y nezačína

neterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkzI ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξx

I Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξxI Musí existovať aj nejaké pravidlo ξ → y , kde y nezačína

neterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkzI ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξxI Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξxI Musí existovať aj nejaké pravidlo ξ → y , kde y nezačína

neterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkzI ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξxI Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξxI Musí existovať aj nejaké pravidlo ξ → y , kde y nezačína

neterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkzI ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξxI Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξx

I Musí existovať aj nejaké pravidlo ξ → y , kde y nezačínaneterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkzI ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξxI Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξxI Musí existovať aj nejaké pravidlo ξ → y , kde y nezačína

neterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkzI ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξxI Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξxI Musí existovať aj nejaké pravidlo ξ → y , kde y nezačína

neterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkzI ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξxI Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξxI Musí existovať aj nejaké pravidlo ξ → y , kde y nezačína

neterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkz

I ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξxI Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξxI Musí existovať aj nejaké pravidlo ξ → y , kde y nezačína

neterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkzI ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Ľavá rekurzia a LL(k) gramatiky

Neterminál ξ v bezkontextovej gramatike G = (N,T ,P, σ) je:I Ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, že ξ ⇒+ ξxI Bezprostredne ľavo rekurzívny, ak existuje x ∈ (N ∪ T )∗ také, žeξ → ξx ∈ P

Žiadna redukovaná LL(k) gramatika nemôže obsahovať ľavo rekurzívnyneterminál:

I Nech ξ ⇒+ ξxI Musí existovať aj nejaké pravidlo ξ → y , kde y nezačína

neterminálom ξ

I Buď x ⇒∗ ε, alebo pre všetky u ∈ T ∗ také, že xk ⇒∗ u platí|u| ≥ k

I Existujú w ∈ T ∗ a z ∈ (N ∪ T )∗ také, že σ ⇒∗lm wξxkzI ∅ 6= FIRSTk(yxkz) ⊆ FIRSTk(ξxxkz)

Ľavá rekurzia znemožňuje napríklad aj rekurzívny zostup

Odstraňovanie ľavej rekurzie

I Nech G je bezkontextová gramatika

I Je možné algoritmicky zostrojiť bezkontextovú gramatiku G ′ bezľavej rekurzie takú, že L(G ′) = L(G )

I Podobné ako prvá fáza prevodu gramatiky do Greibachovejnormálneho tvaru (Formálne jazyky a automaty 2)

Odstraňovanie ľavej rekurzie

I Nech G je bezkontextová gramatikaI Je možné algoritmicky zostrojiť bezkontextovú gramatiku G ′ bez

ľavej rekurzie takú, že L(G ′) = L(G )

I Podobné ako prvá fáza prevodu gramatiky do Greibachovejnormálneho tvaru (Formálne jazyky a automaty 2)

Odstraňovanie ľavej rekurzie

I Nech G je bezkontextová gramatikaI Je možné algoritmicky zostrojiť bezkontextovú gramatiku G ′ bez

ľavej rekurzie takú, že L(G ′) = L(G )

I Podobné ako prvá fáza prevodu gramatiky do Greibachovejnormálneho tvaru (Formálne jazyky a automaty 2)

Odstraňovanie bezprostrednej ľavej rekurzie

I Nech ξ je ľavo rekurzívny neterminál v G = (N,T ,P, σ)

I Nech ξ → ξx1 | ξx2 | . . . | ξxr ∈ PI BUNV, nech x1, . . . , xr sú neprázdneI Nech ξ → w1 | w2 | . . . | ws sú všetky zvyšné pravidlá

Tieto pravidlá nahradíme novými pravidlami (kde ξ′ je nový neterminál):I ξ → w1ξ

′ | w2ξ′ | . . . | wsξ

I ξ′ → x1ξ′ | x2ξ

′ | . . . | xrξ′ | ε

Odstraňovanie bezprostrednej ľavej rekurzie

I Nech ξ je ľavo rekurzívny neterminál v G = (N,T ,P, σ)I Nech ξ → ξx1 | ξx2 | . . . | ξxr ∈ P

I BUNV, nech x1, . . . , xr sú neprázdneI Nech ξ → w1 | w2 | . . . | ws sú všetky zvyšné pravidlá

Tieto pravidlá nahradíme novými pravidlami (kde ξ′ je nový neterminál):I ξ → w1ξ

′ | w2ξ′ | . . . | wsξ

I ξ′ → x1ξ′ | x2ξ

′ | . . . | xrξ′ | ε

Odstraňovanie bezprostrednej ľavej rekurzie

I Nech ξ je ľavo rekurzívny neterminál v G = (N,T ,P, σ)I Nech ξ → ξx1 | ξx2 | . . . | ξxr ∈ PI BUNV, nech x1, . . . , xr sú neprázdne

I Nech ξ → w1 | w2 | . . . | ws sú všetky zvyšné pravidlá

Tieto pravidlá nahradíme novými pravidlami (kde ξ′ je nový neterminál):I ξ → w1ξ

′ | w2ξ′ | . . . | wsξ

I ξ′ → x1ξ′ | x2ξ

′ | . . . | xrξ′ | ε

Odstraňovanie bezprostrednej ľavej rekurzie

I Nech ξ je ľavo rekurzívny neterminál v G = (N,T ,P, σ)I Nech ξ → ξx1 | ξx2 | . . . | ξxr ∈ PI BUNV, nech x1, . . . , xr sú neprázdneI Nech ξ → w1 | w2 | . . . | ws sú všetky zvyšné pravidlá

Tieto pravidlá nahradíme novými pravidlami (kde ξ′ je nový neterminál):I ξ → w1ξ

′ | w2ξ′ | . . . | wsξ

I ξ′ → x1ξ′ | x2ξ

′ | . . . | xrξ′ | ε

Odstraňovanie bezprostrednej ľavej rekurzie

I Nech ξ je ľavo rekurzívny neterminál v G = (N,T ,P, σ)I Nech ξ → ξx1 | ξx2 | . . . | ξxr ∈ PI BUNV, nech x1, . . . , xr sú neprázdneI Nech ξ → w1 | w2 | . . . | ws sú všetky zvyšné pravidlá

Tieto pravidlá nahradíme novými pravidlami (kde ξ′ je nový neterminál):

I ξ → w1ξ′ | w2ξ

′ | . . . | wsξ′

I ξ′ → x1ξ′ | x2ξ

′ | . . . | xrξ′ | ε

Odstraňovanie bezprostrednej ľavej rekurzie

I Nech ξ je ľavo rekurzívny neterminál v G = (N,T ,P, σ)I Nech ξ → ξx1 | ξx2 | . . . | ξxr ∈ PI BUNV, nech x1, . . . , xr sú neprázdneI Nech ξ → w1 | w2 | . . . | ws sú všetky zvyšné pravidlá

Tieto pravidlá nahradíme novými pravidlami (kde ξ′ je nový neterminál):I ξ → w1ξ

′ | w2ξ′ | . . . | wsξ

I ξ′ → x1ξ′ | x2ξ

′ | . . . | xrξ′ | ε

Odstraňovanie bezprostrednej ľavej rekurzie

I Nech ξ je ľavo rekurzívny neterminál v G = (N,T ,P, σ)I Nech ξ → ξx1 | ξx2 | . . . | ξxr ∈ PI BUNV, nech x1, . . . , xr sú neprázdneI Nech ξ → w1 | w2 | . . . | ws sú všetky zvyšné pravidlá

Tieto pravidlá nahradíme novými pravidlami (kde ξ′ je nový neterminál):I ξ → w1ξ

′ | w2ξ′ | . . . | wsξ

I ξ′ → x1ξ′ | x2ξ

′ | . . . | xrξ′ | ε

Príklad: gramatika pre aritmetické výrazy

Prvý pokus:

〈výraz〉 → 〈výraz〉 · 〈výraz〉 | 〈výraz〉/〈výraz〉 |〈výraz〉+ 〈výraz〉 | 〈výraz〉 − 〈výraz〉 |(〈výraz〉) | num

I Táto gramatika je korektná, ale viacznačnáI Na nájdenie správneho stromu odvodenia treba pridať priorityI Napríklad ANTLR4 si vie poradiť aj s gramatikou uvedenou vyššie

(je ale dôležité chápať tomu, čo sa tam deje)I Skúsme radšej nájsť jednoznačnú gramatiku. . .

Príklad: gramatika pre aritmetické výrazy

Prvý pokus:

〈výraz〉 → 〈výraz〉 · 〈výraz〉 | 〈výraz〉/〈výraz〉 |〈výraz〉+ 〈výraz〉 | 〈výraz〉 − 〈výraz〉 |(〈výraz〉) | num

I Táto gramatika je korektná, ale viacznačnáI Na nájdenie správneho stromu odvodenia treba pridať priorityI Napríklad ANTLR4 si vie poradiť aj s gramatikou uvedenou vyššie

(je ale dôležité chápať tomu, čo sa tam deje)I Skúsme radšej nájsť jednoznačnú gramatiku. . .

Príklad: gramatika pre aritmetické výrazy

Prvý pokus:

〈výraz〉 → 〈výraz〉 · 〈výraz〉 | 〈výraz〉/〈výraz〉 |〈výraz〉+ 〈výraz〉 | 〈výraz〉 − 〈výraz〉 |(〈výraz〉) | num

I Táto gramatika je korektná, ale viacznačná

I Na nájdenie správneho stromu odvodenia treba pridať priorityI Napríklad ANTLR4 si vie poradiť aj s gramatikou uvedenou vyššie

(je ale dôležité chápať tomu, čo sa tam deje)I Skúsme radšej nájsť jednoznačnú gramatiku. . .

Príklad: gramatika pre aritmetické výrazy

Prvý pokus:

〈výraz〉 → 〈výraz〉 · 〈výraz〉 | 〈výraz〉/〈výraz〉 |〈výraz〉+ 〈výraz〉 | 〈výraz〉 − 〈výraz〉 |(〈výraz〉) | num

I Táto gramatika je korektná, ale viacznačnáI Na nájdenie správneho stromu odvodenia treba pridať priority

I Napríklad ANTLR4 si vie poradiť aj s gramatikou uvedenou vyššie(je ale dôležité chápať tomu, čo sa tam deje)

I Skúsme radšej nájsť jednoznačnú gramatiku. . .

Príklad: gramatika pre aritmetické výrazy

Prvý pokus:

〈výraz〉 → 〈výraz〉 · 〈výraz〉 | 〈výraz〉/〈výraz〉 |〈výraz〉+ 〈výraz〉 | 〈výraz〉 − 〈výraz〉 |(〈výraz〉) | num

I Táto gramatika je korektná, ale viacznačnáI Na nájdenie správneho stromu odvodenia treba pridať priorityI Napríklad ANTLR4 si vie poradiť aj s gramatikou uvedenou vyššie

(je ale dôležité chápať tomu, čo sa tam deje)

I Skúsme radšej nájsť jednoznačnú gramatiku. . .

Príklad: gramatika pre aritmetické výrazy

Prvý pokus:

〈výraz〉 → 〈výraz〉 · 〈výraz〉 | 〈výraz〉/〈výraz〉 |〈výraz〉+ 〈výraz〉 | 〈výraz〉 − 〈výraz〉 |(〈výraz〉) | num

I Táto gramatika je korektná, ale viacznačnáI Na nájdenie správneho stromu odvodenia treba pridať priorityI Napríklad ANTLR4 si vie poradiť aj s gramatikou uvedenou vyššie

(je ale dôležité chápať tomu, čo sa tam deje)I Skúsme radšej nájsť jednoznačnú gramatiku. . .

Príklad: gramatika pre aritmetické výrazy

Druhý pokus:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

I Táto gramatika je korektná a jednoznačná, ale ľavo rekurzívnaI Obsahuje iba bezprostrednú ľavú rekurziuI Aplikujme preto konštrukciu na odstránenie bezprostrednej ľavej

rekurzie

Príklad: gramatika pre aritmetické výrazy

Druhý pokus:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

I Táto gramatika je korektná a jednoznačná, ale ľavo rekurzívnaI Obsahuje iba bezprostrednú ľavú rekurziuI Aplikujme preto konštrukciu na odstránenie bezprostrednej ľavej

rekurzie

Príklad: gramatika pre aritmetické výrazy

Druhý pokus:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

I Táto gramatika je korektná a jednoznačná, ale ľavo rekurzívna

I Obsahuje iba bezprostrednú ľavú rekurziuI Aplikujme preto konštrukciu na odstránenie bezprostrednej ľavej

rekurzie

Príklad: gramatika pre aritmetické výrazy

Druhý pokus:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

I Táto gramatika je korektná a jednoznačná, ale ľavo rekurzívnaI Obsahuje iba bezprostrednú ľavú rekurziu

I Aplikujme preto konštrukciu na odstránenie bezprostrednej ľavejrekurzie

Príklad: gramatika pre aritmetické výrazy

Druhý pokus:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

I Táto gramatika je korektná a jednoznačná, ale ľavo rekurzívnaI Obsahuje iba bezprostrednú ľavú rekurziuI Aplikujme preto konštrukciu na odstránenie bezprostrednej ľavej

rekurzie

Príklad: gramatika pre aritmetické výrazy

Pôvodná gramatika:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

Výsledná gramatika:

〈výraz〉 → 〈člen〉〈výraz〉′

〈výraz〉′ → + 〈člen〉〈výraz〉′ | − 〈člen〉〈výraz〉′ | ε〈člen〉 → 〈faktor〉〈člen〉′

〈člen〉′ → · 〈faktor〉〈člen〉′ | /〈faktor〉〈člen〉′ | ε〈faktor〉 → (〈výraz〉) | num

I Pôvodná gramatika zodpovedá ľavo asociatívnym operátorom:napríklad 1− 2− 3 = (1− 2)− 3

I V novej gramatike už syntaktický strom nezodpovedá očakávanémuaritmetickému stromu

I Časté riešenie: napísanie procedúr na vyrobenie „abstraktnéhosyntaktického stromu“

Príklad: gramatika pre aritmetické výrazy

Pôvodná gramatika:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

Výsledná gramatika:

〈výraz〉 → 〈člen〉〈výraz〉′

〈výraz〉′ → + 〈člen〉〈výraz〉′ | − 〈člen〉〈výraz〉′ | ε〈člen〉 → 〈faktor〉〈člen〉′

〈člen〉′ → · 〈faktor〉〈člen〉′ | /〈faktor〉〈člen〉′ | ε〈faktor〉 → (〈výraz〉) | num

I Pôvodná gramatika zodpovedá ľavo asociatívnym operátorom:napríklad 1− 2− 3 = (1− 2)− 3

I V novej gramatike už syntaktický strom nezodpovedá očakávanémuaritmetickému stromu

I Časté riešenie: napísanie procedúr na vyrobenie „abstraktnéhosyntaktického stromu“

Príklad: gramatika pre aritmetické výrazy

Pôvodná gramatika:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

Výsledná gramatika:

〈výraz〉 → 〈člen〉〈výraz〉′

〈výraz〉′ → + 〈člen〉〈výraz〉′ | − 〈člen〉〈výraz〉′ | ε〈člen〉 → 〈faktor〉〈člen〉′

〈člen〉′ → · 〈faktor〉〈člen〉′ | /〈faktor〉〈člen〉′ | ε〈faktor〉 → (〈výraz〉) | num

I Pôvodná gramatika zodpovedá ľavo asociatívnym operátorom:napríklad 1− 2− 3 = (1− 2)− 3

I V novej gramatike už syntaktický strom nezodpovedá očakávanémuaritmetickému stromu

I Časté riešenie: napísanie procedúr na vyrobenie „abstraktnéhosyntaktického stromu“

Príklad: gramatika pre aritmetické výrazy

Pôvodná gramatika:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

Výsledná gramatika:

〈výraz〉 → 〈člen〉〈výraz〉′

〈výraz〉′ → + 〈člen〉〈výraz〉′ | − 〈člen〉〈výraz〉′ | ε〈člen〉 → 〈faktor〉〈člen〉′

〈člen〉′ → · 〈faktor〉〈člen〉′ | /〈faktor〉〈člen〉′ | ε〈faktor〉 → (〈výraz〉) | num

I Pôvodná gramatika zodpovedá ľavo asociatívnym operátorom:napríklad 1− 2− 3 = (1− 2)− 3

I V novej gramatike už syntaktický strom nezodpovedá očakávanémuaritmetickému stromu

I Časté riešenie: napísanie procedúr na vyrobenie „abstraktnéhosyntaktického stromu“

Príklad: gramatika pre aritmetické výrazy

Pôvodná gramatika:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

Výsledná gramatika:

〈výraz〉 → 〈člen〉〈výraz〉′

〈výraz〉′ → + 〈člen〉〈výraz〉′ | − 〈člen〉〈výraz〉′ | ε〈člen〉 → 〈faktor〉〈člen〉′

〈člen〉′ → · 〈faktor〉〈člen〉′ | /〈faktor〉〈člen〉′ | ε〈faktor〉 → (〈výraz〉) | num

I Pôvodná gramatika zodpovedá ľavo asociatívnym operátorom:napríklad 1− 2− 3 = (1− 2)− 3

I V novej gramatike už syntaktický strom nezodpovedá očakávanémuaritmetickému stromu

I Časté riešenie: napísanie procedúr na vyrobenie „abstraktnéhosyntaktického stromu“

Príklad: gramatika pre aritmetické výrazy

Pôvodná gramatika:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

Výsledná gramatika:

〈výraz〉 → 〈člen〉〈výraz〉′

〈výraz〉′ → + 〈člen〉〈výraz〉′ | − 〈člen〉〈výraz〉′ | ε〈člen〉 → 〈faktor〉〈člen〉′

〈člen〉′ → · 〈faktor〉〈člen〉′ | /〈faktor〉〈člen〉′ | ε〈faktor〉 → (〈výraz〉) | num

I Pôvodná gramatika zodpovedá ľavo asociatívnym operátorom:napríklad 1− 2− 3 = (1− 2)− 3

I V novej gramatike už syntaktický strom nezodpovedá očakávanémuaritmetickému stromu

I Časté riešenie: napísanie procedúr na vyrobenie „abstraktnéhosyntaktického stromu“

Príklad: gramatika pre aritmetické výrazy

Pôvodná gramatika:

〈výraz〉 → 〈výraz〉+ 〈člen〉 | 〈výraz〉 − 〈člen〉 | 〈člen〉〈člen〉 → 〈člen〉 · 〈faktor〉 | 〈člen〉/〈faktor〉 | 〈faktor〉〈faktor〉 → (〈výraz〉) | num

Výsledná gramatika:

〈výraz〉 → 〈člen〉〈výraz〉′

〈výraz〉′ → + 〈člen〉〈výraz〉′ | − 〈člen〉〈výraz〉′ | ε〈člen〉 → 〈faktor〉〈člen〉′

〈člen〉′ → · 〈faktor〉〈člen〉′ | /〈faktor〉〈člen〉′ | ε〈faktor〉 → (〈výraz〉) | num

I Pôvodná gramatika zodpovedá ľavo asociatívnym operátorom:napríklad 1− 2− 3 = (1− 2)− 3

I V novej gramatike už syntaktický strom nezodpovedá očakávanémuaritmetickému stromu

I Časté riešenie: napísanie procedúr na vyrobenie „abstraktnéhosyntaktického stromu“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:

I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“

I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)

I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:

1. Opakuj pre k = 1, . . . , n:1.1. Opakuj pre j = 1, . . . , k − 1:

1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:

1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj

1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie

Predpokladajme, že gramatika na vstupe:I Je „bezepsilonová“I Neobsahuje „reťazové pravidlá“ (α→ β)I Má neterminály ξ1, . . . , ξn (BUNV)

Ľavú rekurziu možno odstrániť nasledujúcim algoritmom:1. Opakuj pre k = 1, . . . , n:

1.1. Opakuj pre j = 1, . . . , k − 1:1.1.1. Nech ξj → w1 | . . . | wm sú všetky pravidlá zo ξj1.1.2. Nahraď každé pravidlo ξk → ξjx pravidlami ξk → w1x | . . . | wmx

1.2. Odstráň bezprostrednú ľavú rekurziu v ξk

I Pravé strany pravidiel zo ξk teraz začínajú buď terminálom, aleboneterminálom ξj , kde j > k

I Pravé strany pravidiel zo ξ′k sú takisto „v poriadku“

Odstraňovanie ľavej rekurzie (príklad)

Uvažujme gramatiku s nasledujúcimi pravidlami:

ξ1 → ξ1a | ξ2ξ2ξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 1, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 2, bod 1.1:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ2ξ2ξ

′1ξ1 | ξ2ξ2 | b

k = 2, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → bξ′2ξ′2 → ξ2ξ

′1ξ1ξ

′2 | ξ2ξ′2 | ε

Odstraňovanie ľavej rekurzie (príklad)

Uvažujme gramatiku s nasledujúcimi pravidlami:

ξ1 → ξ1a | ξ2ξ2ξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 1, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 2, bod 1.1:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ2ξ2ξ

′1ξ1 | ξ2ξ2 | b

k = 2, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → bξ′2ξ′2 → ξ2ξ

′1ξ1ξ

′2 | ξ2ξ′2 | ε

Odstraňovanie ľavej rekurzie (príklad)

Uvažujme gramatiku s nasledujúcimi pravidlami:

ξ1 → ξ1a | ξ2ξ2ξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 1, bod 1.2:

ξ1 → ξ2ξ2ξ′1

ξ′1 → aξ′1 | εξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 2, bod 1.1:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ2ξ2ξ

′1ξ1 | ξ2ξ2 | b

k = 2, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → bξ′2ξ′2 → ξ2ξ

′1ξ1ξ

′2 | ξ2ξ′2 | ε

Odstraňovanie ľavej rekurzie (príklad)

Uvažujme gramatiku s nasledujúcimi pravidlami:

ξ1 → ξ1a | ξ2ξ2ξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 1, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 2, bod 1.1:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ2ξ2ξ

′1ξ1 | ξ2ξ2 | b

k = 2, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → bξ′2ξ′2 → ξ2ξ

′1ξ1ξ

′2 | ξ2ξ′2 | ε

Odstraňovanie ľavej rekurzie (príklad)

Uvažujme gramatiku s nasledujúcimi pravidlami:

ξ1 → ξ1a | ξ2ξ2ξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 1, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 2, bod 1.1:

ξ1 → ξ2ξ2ξ′1

ξ′1 → aξ′1 | εξ2 → ξ2ξ2ξ

′1ξ1 | ξ2ξ2 | b

k = 2, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → bξ′2ξ′2 → ξ2ξ

′1ξ1ξ

′2 | ξ2ξ′2 | ε

Odstraňovanie ľavej rekurzie (príklad)

Uvažujme gramatiku s nasledujúcimi pravidlami:

ξ1 → ξ1a | ξ2ξ2ξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 1, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 2, bod 1.1:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ2ξ2ξ

′1ξ1 | ξ2ξ2 | b

k = 2, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → bξ′2ξ′2 → ξ2ξ

′1ξ1ξ

′2 | ξ2ξ′2 | ε

Odstraňovanie ľavej rekurzie (príklad)

Uvažujme gramatiku s nasledujúcimi pravidlami:

ξ1 → ξ1a | ξ2ξ2ξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 1, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 2, bod 1.1:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ2ξ2ξ

′1ξ1 | ξ2ξ2 | b

k = 2, bod 1.2:

ξ1 → ξ2ξ2ξ′1

ξ′1 → aξ′1 | εξ2 → bξ′2ξ′2 → ξ2ξ

′1ξ1ξ

′2 | ξ2ξ′2 | ε

Odstraňovanie ľavej rekurzie (príklad)

Uvažujme gramatiku s nasledujúcimi pravidlami:

ξ1 → ξ1a | ξ2ξ2ξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 1, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ1ξ1 | ξ2ξ2 | b

k = 2, bod 1.1:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → ξ2ξ2ξ

′1ξ1 | ξ2ξ2 | b

k = 2, bod 1.2:ξ1 → ξ2ξ2ξ

′1

ξ′1 → aξ′1 | εξ2 → bξ′2ξ′2 → ξ2ξ

′1ξ1ξ

′2 | ξ2ξ′2 | ε

Ľavý rozklad

Uvažujme gramatiku s (okrem iného) nasledujúcimi pravidlami:

I ξ → xyI ξ → xy ′

I x , y , y ′ sú slová z (N ∪ T )∗

I Ak zostávajúci vstup začína slovom odvoditeľným z x , prediktívneparsovanie môže byť problém

Ľavý rozklad (angl. „left factoring“):I ξ → xξ′

I ξ′ → y | y ′

Ľavý rozklad

Uvažujme gramatiku s (okrem iného) nasledujúcimi pravidlami:I ξ → xy

I ξ → xy ′

I x , y , y ′ sú slová z (N ∪ T )∗

I Ak zostávajúci vstup začína slovom odvoditeľným z x , prediktívneparsovanie môže byť problém

Ľavý rozklad (angl. „left factoring“):I ξ → xξ′

I ξ′ → y | y ′

Ľavý rozklad

Uvažujme gramatiku s (okrem iného) nasledujúcimi pravidlami:I ξ → xyI ξ → xy ′

I x , y , y ′ sú slová z (N ∪ T )∗

I Ak zostávajúci vstup začína slovom odvoditeľným z x , prediktívneparsovanie môže byť problém

Ľavý rozklad (angl. „left factoring“):I ξ → xξ′

I ξ′ → y | y ′

Ľavý rozklad

Uvažujme gramatiku s (okrem iného) nasledujúcimi pravidlami:I ξ → xyI ξ → xy ′

I x , y , y ′ sú slová z (N ∪ T )∗

I Ak zostávajúci vstup začína slovom odvoditeľným z x , prediktívneparsovanie môže byť problém

Ľavý rozklad (angl. „left factoring“):I ξ → xξ′

I ξ′ → y | y ′

Ľavý rozklad

Uvažujme gramatiku s (okrem iného) nasledujúcimi pravidlami:I ξ → xyI ξ → xy ′

I x , y , y ′ sú slová z (N ∪ T )∗

I Ak zostávajúci vstup začína slovom odvoditeľným z x , prediktívneparsovanie môže byť problém

Ľavý rozklad (angl. „left factoring“):I ξ → xξ′

I ξ′ → y | y ′

Ľavý rozklad

Uvažujme gramatiku s (okrem iného) nasledujúcimi pravidlami:I ξ → xyI ξ → xy ′

I x , y , y ′ sú slová z (N ∪ T )∗

I Ak zostávajúci vstup začína slovom odvoditeľným z x , prediktívneparsovanie môže byť problém

Ľavý rozklad (angl. „left factoring“):

I ξ → xξ′

I ξ′ → y | y ′

Ľavý rozklad

Uvažujme gramatiku s (okrem iného) nasledujúcimi pravidlami:I ξ → xyI ξ → xy ′

I x , y , y ′ sú slová z (N ∪ T )∗

I Ak zostávajúci vstup začína slovom odvoditeľným z x , prediktívneparsovanie môže byť problém

Ľavý rozklad (angl. „left factoring“):I ξ → xξ′

I ξ′ → y | y ′

Ľavý rozklad

Uvažujme gramatiku s (okrem iného) nasledujúcimi pravidlami:I ξ → xyI ξ → xy ′

I x , y , y ′ sú slová z (N ∪ T )∗

I Ak zostávajúci vstup začína slovom odvoditeľným z x , prediktívneparsovanie môže byť problém

Ľavý rozklad (angl. „left factoring“):I ξ → xξ′

I ξ′ → y | y ′

Časť 4:

Pokročilé parsovacie stratégie

LL(∗) parsovanie

I Používané v nižších verziách ANTLR

I Idea: ku každému neterminálu sa vytvorí konečný automatI Na zistenie nasledujúceho pravidla sa tento automat spustí na

zostávajúcom vstupeI Ak je gramatika LL(k), automat spraví najviac k krokov a nájde

správne pravidloI LL(∗) ale „zvládne“ aj gramatiky, ktoré nie sú LL(k)I Vďaka sémantickým predikátom v turingovsky úplnom jazyku:

(teoretická) možnosť popísať ľubovoľný rekurzívny jazykI Jediné podstatné obmedzenie: vstupná gramatika nesmie byť ľavo

rekurzívna

LL(∗) parsovanie

I Používané v nižších verziách ANTLRI Idea: ku každému neterminálu sa vytvorí konečný automat

I Na zistenie nasledujúceho pravidla sa tento automat spustí nazostávajúcom vstupe

I Ak je gramatika LL(k), automat spraví najviac k krokov a nájdesprávne pravidlo

I LL(∗) ale „zvládne“ aj gramatiky, ktoré nie sú LL(k)I Vďaka sémantickým predikátom v turingovsky úplnom jazyku:

(teoretická) možnosť popísať ľubovoľný rekurzívny jazykI Jediné podstatné obmedzenie: vstupná gramatika nesmie byť ľavo

rekurzívna

LL(∗) parsovanie

I Používané v nižších verziách ANTLRI Idea: ku každému neterminálu sa vytvorí konečný automatI Na zistenie nasledujúceho pravidla sa tento automat spustí na

zostávajúcom vstupe

I Ak je gramatika LL(k), automat spraví najviac k krokov a nájdesprávne pravidlo

I LL(∗) ale „zvládne“ aj gramatiky, ktoré nie sú LL(k)I Vďaka sémantickým predikátom v turingovsky úplnom jazyku:

(teoretická) možnosť popísať ľubovoľný rekurzívny jazykI Jediné podstatné obmedzenie: vstupná gramatika nesmie byť ľavo

rekurzívna

LL(∗) parsovanie

I Používané v nižších verziách ANTLRI Idea: ku každému neterminálu sa vytvorí konečný automatI Na zistenie nasledujúceho pravidla sa tento automat spustí na

zostávajúcom vstupeI Ak je gramatika LL(k), automat spraví najviac k krokov a nájde

správne pravidlo

I LL(∗) ale „zvládne“ aj gramatiky, ktoré nie sú LL(k)I Vďaka sémantickým predikátom v turingovsky úplnom jazyku:

(teoretická) možnosť popísať ľubovoľný rekurzívny jazykI Jediné podstatné obmedzenie: vstupná gramatika nesmie byť ľavo

rekurzívna

LL(∗) parsovanie

I Používané v nižších verziách ANTLRI Idea: ku každému neterminálu sa vytvorí konečný automatI Na zistenie nasledujúceho pravidla sa tento automat spustí na

zostávajúcom vstupeI Ak je gramatika LL(k), automat spraví najviac k krokov a nájde

správne pravidloI LL(∗) ale „zvládne“ aj gramatiky, ktoré nie sú LL(k)

I Vďaka sémantickým predikátom v turingovsky úplnom jazyku:(teoretická) možnosť popísať ľubovoľný rekurzívny jazyk

I Jediné podstatné obmedzenie: vstupná gramatika nesmie byť ľavorekurzívna

LL(∗) parsovanie

I Používané v nižších verziách ANTLRI Idea: ku každému neterminálu sa vytvorí konečný automatI Na zistenie nasledujúceho pravidla sa tento automat spustí na

zostávajúcom vstupeI Ak je gramatika LL(k), automat spraví najviac k krokov a nájde

správne pravidloI LL(∗) ale „zvládne“ aj gramatiky, ktoré nie sú LL(k)I Vďaka sémantickým predikátom v turingovsky úplnom jazyku:

(teoretická) možnosť popísať ľubovoľný rekurzívny jazyk

I Jediné podstatné obmedzenie: vstupná gramatika nesmie byť ľavorekurzívna

LL(∗) parsovanie

I Používané v nižších verziách ANTLRI Idea: ku každému neterminálu sa vytvorí konečný automatI Na zistenie nasledujúceho pravidla sa tento automat spustí na

zostávajúcom vstupeI Ak je gramatika LL(k), automat spraví najviac k krokov a nájde

správne pravidloI LL(∗) ale „zvládne“ aj gramatiky, ktoré nie sú LL(k)I Vďaka sémantickým predikátom v turingovsky úplnom jazyku:

(teoretická) možnosť popísať ľubovoľný rekurzívny jazykI Jediné podstatné obmedzenie: vstupná gramatika nesmie byť ľavo

rekurzívna

ALL(∗) parsovanie

I Rozšírenie LL(∗) používané v ANTLR4

I Akceptuje aj vstupné gramatiky s bezprostrednou ľavou rekurziouI Neakceptuje gramatiky s inou ako bezprostrednou ľavou rekurziouI To ale zvyčajne nie je veľký problém

ALL(∗) parsovanie

I Rozšírenie LL(∗) používané v ANTLR4I Akceptuje aj vstupné gramatiky s bezprostrednou ľavou rekurziou

I Neakceptuje gramatiky s inou ako bezprostrednou ľavou rekurziouI To ale zvyčajne nie je veľký problém

ALL(∗) parsovanie

I Rozšírenie LL(∗) používané v ANTLR4I Akceptuje aj vstupné gramatiky s bezprostrednou ľavou rekurziouI Neakceptuje gramatiky s inou ako bezprostrednou ľavou rekurziou

I To ale zvyčajne nie je veľký problém

ALL(∗) parsovanie

I Rozšírenie LL(∗) používané v ANTLR4I Akceptuje aj vstupné gramatiky s bezprostrednou ľavou rekurziouI Neakceptuje gramatiky s inou ako bezprostrednou ľavou rekurziouI To ale zvyčajne nie je veľký problém

top related