cvičenie3:syntaktickáanalýzazhoranadol peterkostolányi 24...

289
Kompilátory Cvičenie 3: Syntaktická analýza zhora nadol Peter Kostolányi 24. októbra 2017

Upload: others

Post on 24-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

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

Kompilátory

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

Peter Kostolányi

24. októbra 2017

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Časť 1:

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

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

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

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

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

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

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

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

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

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

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

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

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

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

Úloha syntaktickej analýzy pri tvorbe kompilátorov

Prud vstupnychsymbolov

Lexikalnyanalyzator

(lexer)Prud tokenov

Syntaktickyanalyzator

(parser)

Syntaktickystrom

Dalsie fazykompilacie

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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:

σ

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

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:

σ

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

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:

σ

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

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:

σ

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

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:

σ

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

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 β

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

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 β

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

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

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

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

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

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

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

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

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

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 α

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

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 α

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

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

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

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

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

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

ε

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

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

ε

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

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 β

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

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 β

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

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

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

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

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

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

ε

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

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

ε

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

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

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

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

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

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

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

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

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

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

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

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

α

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

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

α

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

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

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

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

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

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

α

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

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

α

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

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

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

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

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

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

α

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

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

α

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

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

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

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

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

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

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

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

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

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

α

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

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

α

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

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

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

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

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

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

α

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

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

α

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

β

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

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

β

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Časť 2:

SLL(k) a LL(k) gramatiky

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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á

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

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á

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

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á

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

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á

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

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á

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

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á

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

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á

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

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á

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

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á

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

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á

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

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á

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

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á

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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.

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

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.

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

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.

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

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.

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

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.

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

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.

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

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.

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

Časť 3:

Nutné podmienky na splnenie definície LL(k) gramatík

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

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)

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

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)

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

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)

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

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)

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

Ľ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

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

Ľ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

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

Ľ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

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

Ľ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

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

Ľ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

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

Ľ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

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

Ľ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

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

Ľ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

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

Ľ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

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

Ľ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

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

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)

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

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)

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

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)

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

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ξ′ | ε

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

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ξ′ | ε

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

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ξ′ | ε

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

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ξ′ | ε

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

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ξ′ | ε

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

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ξ′ | ε

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

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ξ′ | ε

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

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. . .

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

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. . .

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

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. . .

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

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. . .

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

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. . .

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

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. . .

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

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

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

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

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

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

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

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

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

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

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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“

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

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 | ε

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

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 | ε

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

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 | ε

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

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 | ε

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

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 | ε

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

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 | ε

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

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 | ε

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

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 | ε

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

Ľ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 ′

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

Ľ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 ′

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

Ľ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 ′

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

Ľ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 ′

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

Ľ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 ′

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

Ľ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 ′

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

Ľ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 ′

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

Ľ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 ′

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

Časť 4:

Pokročilé parsovacie stratégie

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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