Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
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