Poslední aktualizace: 26. října 2011



Podobné dokumenty
Syntaxí řízený překlad

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

a m1 a m2 a mn zobrazení. Operaci násobení u matic budeme definovat jiným způsobem.

Moderní technologie ve studiu aplikované fyziky CZ.1.07/2.2.00/ Reálná čísla

3. Polynomy Verze 338.

Vlastnosti Derivační strom Metody Metoda shora dolů Metoda zdola nahoru Pomocné množiny. Syntaktická analýza. Metody a nástroje syntaktické analýzy

c sin Příklad 2 : v trojúhelníku ABC platí : a = 11,6 dm, c = 9 dm, α = Vypočtěte stranu b a zbývající úhly.

řádově různě rostoucí rostou řádově stejně rychle dvě funkce faktor izomorfismus neorientovaných grafů souvislý graf souvislost komponenta

I. kolo kategorie Z6

1.7. Mechanické kmitání

6. Matice. Algebraické vlastnosti

3.5.8 Otočení. Předpoklady: 3506

Večerní kurzy matematiky Letní studentská konference Tudy Cesta Nevede

Na následující stránce je poskytnuta informace o tom, komu je tento produkt určen. Pro vyplnění nového hlášení se klikněte na tlačítko Zadat nové

3.1.4 Trojúhelník. Předpoklady: Každé tři různé body neležící v přímce určují trojúhelník. C. Co to je, víme. Jak ho definovat?

Konzistence databáze v nekonzistentním světě

Exponenciála matice a její užití. fundamentálních matic. Užití mocninných řad pro rovnice druhého řádu

Směrované a přepínané sítě Border Gateway Protocol (BGP)

Přehled konkrétní práce se žáky

Matematický model kamery v afinním prostoru

Matematika pro chemické inženýry. Drahoslava Janovská

Příprava na 1. čtvrtletní písemku pro třídu 1EB

CVIČENÍ č. 8 BERNOULLIHO ROVNICE

MANUÁL PRO HODNOCENÍ OTEVŘENÝCH TESTOVÝCH ÚLOH MATEMATIKA SADA B (TEST PRO PŘIJÍMACÍ ZKOUŠKY DO 8LETÉHO GYMNÁZIA)

Rostislav Horčík. 13. října 2006

7. Odraz a lom. 7.1 Rovinná rozhraní dielektrik - základní pojmy

Zobrazení v rovině je předpis, který každému bodu X roviny připisuje právě jeden bod X roviny. Bod X se nazývá vzor, bod X se nazývá obraz.

Hvězdicový provzdušňovač (aerátor) Návod k použití

Přímá úměrnost

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

Výukový materiál zpracován v rámci projektu EU peníze školám. Registrační číslo projektu: CZ.1.07/1.5.00/

B A B A B A B A A B A B B

Žáci mají k dispozici pracovní list. Formou kolektivní diskuze a výkladu si osvojí grafickou minimalizaci zápisu logické funkce

M - Příprava na čtvrtletní písemnou práci

1. Pojmy a definice. 2. Naivní algoritmus. 3. Boyer Moore

Modul Řízení objednávek.

Hra Života v jednom řádku APL

Komentář k datovému standardu a automatizovaným kontrolám obsahu F_ODPRZ_BAT

Vyhrazená elektrická zařízení

Školkovné 2013/2014. Pro zápis dětí od 2 let.

Sada 1 Geodezie I. 06. Přímé měření délek pásmem

SLEVY I. ZÁKLADNÍ SLUŽBY

Matematický KLOKAN kategorie Benjamín

Státnice odborné č. 19

VY_52_INOVACE_2NOV39. Autor: Mgr. Jakub Novák. Datum: Ročník: 8. a 9.

PODLE STEJNOJMENNÉHO ROMÁNU FRANZE KAFKY ADAPTOVAL DAVID ZANE MAIROWITZ NAKRESLIL JAROMÍR 99 ČESKY VYDAL LABYRINT

Zapojení horního spína e pro dlouhé doby sepnutí III

MATEMATIKA I VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ FAKULTA STAVEBNÍ JIŘÍ NOVOTNÝ ZÁKLADY LINEÁRNÍ ALGEBRY

ÚVOD BALENÍ OBSAHUJE BEZPEČNOSTNÍ POKYNY PŘEHLED FUNKCÍ NABÍJEČKY NÁVOD K OBSLUZE

Název školy. Moravské gymnázium Brno s.r.o. Mgr. Marie Chadimová Mgr. Věra Jeřábková. Autor. Matematika. Planimetrie. Trojúhelníky. Teorie a příklady.

PŘESNÁ STŘELBA V ČASOVÉM LIMITU

Skupina Testování obsahuje následující moduly: Síla a rozsah výběru, Testy a Kontingenční tabulka.

SYLABUS PŘEDNÁŠKY 6b Z INŽENÝRSKÉ GEODÉZIE (Polohové vytyčování) 4. ročník bakalářského studia studijní program G studijní obor G

Příklad 1.3: Mocnina matice

SimOS. Jakub Doležal Radek Hlaváček Michael Očenášek Marek Reimer

RUSSELŮV PARADOX RUSSELLŮV PARADOX

Jednoznačné a nejednoznačné gramatiky

Mechy. Kapradiny Přesličky Plavuně

Paměťové moduly Uživatelská příručka

Lineární Regrese Hašovací Funkce

Elektronická meteorologická stanice»ews-330«

6 Extrémy funkcí dvou proměnných

ANOTACE K VÝUKOVÉ SADĚ

Statistika ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE FAKULTA DOPRAVNÍ. Jiří Volf, Adam Kratochvíl, Kateřina Žáková. Semestrální práce - 0 -

Úlohy domácího kola kategorie C

VYHODNOCENÍ NA KONCI HRY

NÁVOD K OBSLUZE. Obj. č.:

ZNALECKÝ POSUDEK. Mgr. Pavla Fučíková - soudní exekutor Slévárenská 410/ Ostrava-Mariánské Hory

Příloha Průběžné zprávy. Shrnutí návrhu algoritmu

Společenství pro dům Doležalova č.p , Praha 14

Oborové číslo Hodnocení - část A Hodnocení - část B Hodnocení - část A+B

MECHANICKÁ PRÁCE A ENERGIE

Mechanismy. Vazby členů v mechanismech (v rovině):

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ

Fyzikální praktikum FJFI ČVUT v Praze

Algoritmizace a programování

1.4.1 Výroky. Předpoklady: Výrok je sdělení, u něhož má smysl otázka, zda je či není pravdivé

1. Definujte překladač. Jaký je rozdíl mezi interpretačním a kompilačním překladačem? Co je to konverzační překladač?

Fakulta strojního inženýrství VUT v Brně Ústav konstruování. KONSTRUOVÁNÍ STROJŮ mechanismy. Přednáška 8

Metodika testování navazujících evidencí

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

MONTÁŽNÍ NÁVOD LIC VÍKO ŠACHTY SE ZAJIŠTĚNÍM

Hodnota URV (pf) (hladina 100%) Zvýšení URV. Snížit URV. Nastavit URV podle PV

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Přijímací řízení pro denní formu:

3.cvičení. k p = {X, Y } u(x, r 1 = XA ), v(y, r 1 = XA ) u v = {A, R} q = AR. 1. Bodem A kolmici: Zvolím bod X p k(a, r 1 = XA ),

R O Z H O D N U T Í. I. podle ustanovení 19a odst. 2 zákona o integrované prevenci se nejedná o podstatnou změnu v provozu zařízení v případě:

Zefektivnění zadávání znaků na mobilním telefonu bez T9

Pokud se vám tyto otázky zdají jednoduché a nemáte problém je správně zodpovědět, budete mít velkou šanci v této hře zvítězit.

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ MEII MĚŘENÍ ZÁKLADNÍCH EL. VELIČIN

Znalecký posudek č /2014

Charita Zlín. Burešov 4886, Zlín IČO: telefon:

Metoda konečných prvků. 6. přednáška Tělesové prvky - úvod (lineární trojúhelník a lineární čtyřstěn) Martin Vrbka, Michal Vaverka

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.

( x ) 2 ( ) Další úlohy s kvadratickými funkcemi. Předpoklady: 2501, 2502

Junior Plus 2/4/6/8 NÁVOD K POUŽITÍ ŘÍDÍCÍ PŘÍSTROJ SE DVĚMA PROGRAMY PRO INTERNÍ MONTÁŽ, S HLAVNÍM VENTILEM/ START ČERPADLA & KALKULACE SPOTŘEBY VODY

Znalecký posudek č /10

Nemocnice Na Bulovce Budínova 67/2, Praha 8 Metodika zkoušek provozní stálosti Chirana, Chiralux 2, v.č

1 ŘÍZENÍ S POSILOVAČEM

Poměry a úměrnosti I

Transkript:

LR(k) překlady Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 26. října 2011

LR(k) překlady Význam LR L left-to-right, R right-parse, k nejvýše k znaků ze vstupu potřebujeme pro rozhodování.

LR(k) gramatika Definice (LR(k) gramatika (1)) Gramatika je typu LR(k), jestliže ji lze použít pro deterministickou syntaktickou analýzu metodou zdola nahoru (vytváříme pravý rozklad) a při rozhodování mezi pravidly potřebujeme znát nejvýše k symbolů ze vstupu. Jazyk je typu LR(k), pokud je generován LR(k) gramatikou. Definice (LR(k) gramatika (2)) Necht G = (N, T, P, S) je bezkontextová gramatika. G je LR(k) gramatika pro nějaké celé nezáporné číslo k, jestliže v případě existence dvou pravých derivací S αax αγx S βby βγy takových, že FIRST k (x) = FIRST k (y), vždy platí αa = βb.

LR(k) gramatika Definice (LR(k) gramatika (1)) Gramatika je typu LR(k), jestliže ji lze použít pro deterministickou syntaktickou analýzu metodou zdola nahoru (vytváříme pravý rozklad) a při rozhodování mezi pravidly potřebujeme znát nejvýše k symbolů ze vstupu. Jazyk je typu LR(k), pokud je generován LR(k) gramatikou. Definice (LR(k) gramatika (2)) Necht G = (N, T, P, S) je bezkontextová gramatika. G je LR(k) gramatika pro nějaké celé nezáporné číslo k, jestliže v případě existence dvou pravých derivací S αax αγx S βby βγy takových, že FIRST k (x) = FIRST k (y), vždy platí αa = βb.

Vztah mezi LL a LR jazyky LR LL CF pro některé jazyky existují oba typy gramatik LL i LR třída jazyků typu LL(1) je vlastní podmnožinou třídy jazyků typu LR(1)

Srovnání LL a LR analýzy LL vstup čteme zleva derivační strom od kořene k listům levá derivace, v simulaci ve směru šipek rozhodujeme se mezi pravidly se stejnou levou stranou (pro tentýž neterminál) v rozkladové tabulce expanze podle pravidel stačí FIRST a FOLLOW LR vstup čteme zleva derivační strom od listů ke kořeni pravá derivace, v simulaci proti směru šipek rozhodujeme se mezi pravidly se stejným podřetězcem na pravé straně v rozkladové tabulce redukce podle pravidel další množiny pro testy

Srovnání LL a LR analýzy LL vstup čteme zleva derivační strom od kořene k listům levá derivace, v simulaci ve směru šipek rozhodujeme se mezi pravidly se stejnou levou stranou (pro tentýž neterminál) v rozkladové tabulce expanze podle pravidel stačí FIRST a FOLLOW LR vstup čteme zleva derivační strom od listů ke kořeni pravá derivace, v simulaci proti směru šipek rozhodujeme se mezi pravidly se stejným podřetězcem na pravé straně v rozkladové tabulce redukce podle pravidel další množiny pro testy

Srovnání LL a LR analýzy LL vstup čteme zleva derivační strom od kořene k listům levá derivace, v simulaci ve směru šipek rozhodujeme se mezi pravidly se stejnou levou stranou (pro tentýž neterminál) v rozkladové tabulce expanze podle pravidel stačí FIRST a FOLLOW LR vstup čteme zleva derivační strom od listů ke kořeni pravá derivace, v simulaci proti směru šipek rozhodujeme se mezi pravidly se stejným podřetězcem na pravé straně v rozkladové tabulce redukce podle pravidel další množiny pro testy

Srovnání LL a LR analýzy LL vstup čteme zleva derivační strom od kořene k listům levá derivace, v simulaci ve směru šipek rozhodujeme se mezi pravidly se stejnou levou stranou (pro tentýž neterminál) v rozkladové tabulce expanze podle pravidel stačí FIRST a FOLLOW LR vstup čteme zleva derivační strom od listů ke kořeni pravá derivace, v simulaci proti směru šipek rozhodujeme se mezi pravidly se stejným podřetězcem na pravé straně v rozkladové tabulce redukce podle pravidel další množiny pro testy

Srovnání LL a LR analýzy LL vstup čteme zleva derivační strom od kořene k listům levá derivace, v simulaci ve směru šipek rozhodujeme se mezi pravidly se stejnou levou stranou (pro tentýž neterminál) v rozkladové tabulce expanze podle pravidel stačí FIRST a FOLLOW LR vstup čteme zleva derivační strom od listů ke kořeni pravá derivace, v simulaci proti směru šipek rozhodujeme se mezi pravidly se stejným podřetězcem na pravé straně v rozkladové tabulce redukce podle pravidel další množiny pro testy

Srovnání LL a LR analýzy LL vstup čteme zleva derivační strom od kořene k listům levá derivace, v simulaci ve směru šipek rozhodujeme se mezi pravidly se stejnou levou stranou (pro tentýž neterminál) v rozkladové tabulce expanze podle pravidel stačí FIRST a FOLLOW LR vstup čteme zleva derivační strom od listů ke kořeni pravá derivace, v simulaci proti směru šipek rozhodujeme se mezi pravidly se stejným podřetězcem na pravé straně v rozkladové tabulce redukce podle pravidel další množiny pro testy

Rozšíření gramatiky Definice (Rozšířená gramatika) Necht G = (N, T, P, S) je bezkontextová gramatika. Rozšířená gramatika ke gramatice G je gramatika G = (N, T, P, S ), kde je N = N {S }, S / N, T = T {#}, P = P {S #S}.

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ Zásobník (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1) #

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ Zásobník push a # (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ push Zásobník b a # (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ redukce podle 4 Zásobník A a # (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ push Zásobník a A a # (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ redukce podle 3 Zásobník A a # (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ push Zásobník a A a # (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ redukce podle 3 Zásobník A a # (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ push Zásobník b A a # (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova abaab Vstup a b a a b $ Zásobník redukce podle 1 S # (abaab$, #, ε) (baab$, #a, ε) (aab$, #ab, ε) (aab$, #aa, 4) (ab$, #aaa, 4) (ab$, #aa, 4, 3) (b$, #aaa, 4, 3) (b$, #aa, 4, 3, 3) ($, #aab, 4, 3, 3) ($, #S, 4, 3, 3, 1)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova aaba (aaba$, #, ε) (aba$, #a, ε) (ba$, #aa, ε) (ba$, #aab, 5) (a$, #aabb, 5) ($, #aabba, 5) ($, #S, 5, 2)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova aaba Vstup a a b a $ Zásobník (aaba$, #, ε) (aba$, #a, ε) (ba$, #aa, ε) (ba$, #aab, 5) (a$, #aabb, 5) ($, #aabba, 5) ($, #S, 5, 2) #

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova aaba Vstup a a b a $ Zásobník push (aaba$, #, ε) (aba$, #a, ε) (ba$, #aa, ε) (ba$, #aab, 5) (a$, #aabb, 5) ($, #aabba, 5) ($, #S, 5, 2) a #

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova aaba Vstup a a b a $ Zásobník push (aaba$, #, ε) (aba$, #a, ε) (ba$, #aa, ε) (ba$, #aab, 5) (a$, #aabb, 5) ($, #aabba, 5) ($, #S, 5, 2) a a #

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova aaba Vstup a a b a $ Zásobník redukce podle 5 B a a # (aaba$, #, ε) (aba$, #a, ε) (ba$, #aa, ε) (ba$, #aab, 5) (a$, #aabb, 5) ($, #aabba, 5) ($, #S, 5, 2)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova aaba Vstup a a b a $ Zásobník redukce podle 2 (aaba$, #, ε) (aba$, #a, ε) (ba$, #aa, ε) (ba$, #aab, 5) (a$, #aabb, 5) ($, #aabba, 5) ($, #S, 5, 2) S #

Gramatika S aab aabba A Aa b B ε Výpočet slova aaba 1, 2 3, 4 5 Vstup Zásobník a a b a $ a b B push a a # (aaba$, #, ε) (aba$, #a, ε) (ba$, #aa, ε) (ba$, #aab, 5) (a$, #aabb, 5) ($, #aabba, 5) ($, #S, 5, 2)

Gramatika S aab aabba 1, 2 A Aa b 3, 4 B ε 5 Výpočet slova aaba Vstup a a b a $ Zásobník redukce podle 2 (aaba$, #, ε) (aba$, #a, ε) (ba$, #aa, ε) (ba$, #aab, 5) (a$, #aabb, 5) ($, #aabba, 5) ($, #S, 5, 2) S #

Definice Pomocné množiny V gramatice G = (N, T, P, S) je funkce BEFORE(A) pro A N definována takto: BEFORE(A) = = { X (N T) S αxaβ, α, β (N T) } { # S Aβ, β (N T) } Vlastnosti: nerozlišujeme varianty pro různá čísla k parametrem je vždy neterminál, zpracováváme paralelně pro všechny neterminály zároveň počítáme s tím, že je používána pravá derivace

Definice Pomocné množiny V gramatice G = (N, T, P, S) je funkce BEFORE(A) pro A N definována takto: BEFORE(A) = = { X (N T) S αxaβ, α, β (N T) } { # S Aβ, β (N T) } Vlastnosti: nerozlišujeme varianty pro různá čísla k parametrem je vždy neterminál, zpracováváme paralelně pro všechny neterminály zároveň počítáme s tím, že je používána pravá derivace

Postup pro (rozšířenou) gramatiku G = (N, T, P, S) 1 # BEFORE(S) 2 Pro každé pravidlo B αxaβ, A, B N, X (N T), α, β (N T) : X BEFORE(A) Do množin jednotlivých neterminálů zařadíme všechny symboly (terminální i neterminální), které jim přímo předcházejí v některém pravidle. 3 Pro každé pravidlo B Aβ, A, B N, β (N T) : BEFORE(B) BEFORE(A) Pokud se některý neterminál (zde A) nachází na začátku řetězce pravidla, pak celý obsah množiny BEFORE přepisovaného neterminálu (zde B) přidáme do BEFORE symbolu A (ve směru šipky pravidla). Tento krok provádíme rekurzívně tak dlouho, dokud dochází ke změnám.

S #S S aabb A cadb Sb ε B abs c SdA BEFORE(S ) = {#} BEFORE(S) = {#, B, a, c, d, A} BEFORE(A) = {a, c, d} BEFORE(B) = {A, d, a} Příklad

S #S S aabb A cadb Sb ε B abs c SdA BEFORE(S ) = {#} BEFORE(S) = {#, B, a, c, d, A} BEFORE(A) = {a, c, d} BEFORE(B) = {A, d, a} Příklad

S #S S aabb A cadb Sb ε B abs c SdA BEFORE(S ) = {#} BEFORE(S) = {#, B, a, c, d, A} BEFORE(A) = {a, c, d} BEFORE(B) = {A, d, a} Příklad

S #S S aabb A cadb Sb ε B abs c SdA BEFORE(S ) = {#} BEFORE(S) = {#, B, a, c, d, A} BEFORE(A) = {a, c, d} BEFORE(B) = {A, d, a} Příklad

S #S S aabb A cadb Sb ε B abs c SdA BEFORE(S ) = {#} BEFORE(S) = {#, B, a, c, d, A} BEFORE(A) = {a, c, d} BEFORE(B) = {A, d, a} Příklad

S #S S aabb A cadb Sb ε B abs c SdA BEFORE(S ) = {#} BEFORE(S) = {#, B, a, c, d, A} BEFORE(A) = {a, c, d} BEFORE(B) = {A, d, a} Příklad

S #S S aabb A cadb Sb ε B abs c SdA BEFORE(S ) = {#} BEFORE(S) = {#, B, a, c, d, A} BEFORE(A) = {a, c, d} BEFORE(B) = {A, d, a} Příklad

S #S S aabb A cadb Sb ε B abs c SdA BEFORE(S ) = {#} BEFORE(S) = {#, B, a, c, d, A} BEFORE(A) = {a, c, d} BEFORE(B) = {A, d, a} Příklad

Definice V gramatice G = (N, T, P, S) pro řetězec α (N T) pro funkci EFF k (α) platí EFF k (α) = { w T w FIRST k (α) a pro pravou derivaci α β wx existuje také jiný případ než β = Awx } Vlastnosti: vycházíme z množin FIRST k u každého prvku množiny zkoumáme derivaci, díky které byl do FIRST k zařazen pokud se do FIRST k (α) mohl dostat jen takovou derivací, kde je nutné na nejlevější symbol slova (neterminál) použít ε-pravidlo, pak tento prvek vyřadíme z EFF k (α)

Definice V gramatice G = (N, T, P, S) pro řetězec α (N T) pro funkci EFF k (α) platí EFF k (α) = { w T w FIRST k (α) a pro pravou derivaci α β wx existuje také jiný případ než β = Awx } Vlastnosti: vycházíme z množin FIRST k u každého prvku množiny zkoumáme derivaci, díky které byl do FIRST k zařazen pokud se do FIRST k (α) mohl dostat jen takovou derivací, kde je nutné na nejlevější symbol slova (neterminál) použít ε-pravidlo, pak tento prvek vyřadíme z EFF k (α)

Příklad S #S S aab ε A ACbA ε B bbc Sm C ABc d ε BEFORE(S ) = {#} BEFORE(S) = {#, A, b} BEFORE(A) = {a, b, A} BEFORE(B) = {A, b} BEFORE(C) = {A} FIRST(aAB) = {a} EFF(aAB) = {a} FIRST(ABc) = {b, a, m} EFF(ABc) = FIRST(ACbA) = {b, a, m, d} EFF(ACbA) = FIRST(C) = {b, a, m, d, ε} EFF(C) = {d} Proč? ACbA Axxxxxxx xxxxxxx (symbolu A na začátku slova se lze zbavit jen ε-pravidlem)

Příklad S #S S aab ε A ACbA ε B bbc Sm C ABc d ε BEFORE(S ) = {#} BEFORE(S) = {#, A, b} BEFORE(A) = {a, b, A} BEFORE(B) = {A, b} BEFORE(C) = {A} FIRST(aAB) = {a} EFF(aAB) = {a} FIRST(ABc) = {b, a, m} EFF(ABc) = FIRST(ACbA) = {b, a, m, d} EFF(ACbA) = FIRST(C) = {b, a, m, d, ε} EFF(C) = {d} Proč? ACbA Axxxxxxx xxxxxxx (symbolu A na začátku slova se lze zbavit jen ε-pravidlem)

Příklad S #S S aab ε A ACbA ε B bbc Sm C ABc d ε BEFORE(S ) = {#} BEFORE(S) = {#, A, b} BEFORE(A) = {a, b, A} BEFORE(B) = {A, b} BEFORE(C) = {A} FIRST(aAB) = {a} EFF(aAB) = {a} FIRST(ABc) = {b, a, m} EFF(ABc) = FIRST(ACbA) = {b, a, m, d} EFF(ACbA) = FIRST(C) = {b, a, m, d, ε} EFF(C) = {d} Proč? ACbA Axxxxxxx xxxxxxx (symbolu A na začátku slova se lze zbavit jen ε-pravidlem)

Příklad S #S S aab ε A ACbA ε B bbc Sm C ABc d ε BEFORE(S ) = {#} BEFORE(S) = {#, A, b} BEFORE(A) = {a, b, A} BEFORE(B) = {A, b} BEFORE(C) = {A} FIRST(aAB) = {a} EFF(aAB) = {a} FIRST(ABc) = {b, a, m} EFF(ABc) = FIRST(ACbA) = {b, a, m, d} EFF(ACbA) = FIRST(C) = {b, a, m, d, ε} EFF(C) = {d} Proč? ACbA Axxxxxxx xxxxxxx (symbolu A na začátku slova se lze zbavit jen ε-pravidlem)

Silné LR(k) gramatiky Definice (Silná LR(k) gramatika (1)) Silná LR(k) gramatika je taková gramatika, pro kterou je možné vytvořit syntaktický analyzátor vykonávající syntaktickou analýzu zdola nahoru, který využívá pouze informace o nejbližších k symbolech v nepřečtené části vstupního řetězce.

Definice (Silná LR(k) gramatika (2)) Bezkontextová gramatika G = (N, T, P, S) je silná LR(k) gramatika, jestliže pro rozšířenou gramatiku G = (N {S }, T {#}, P, S ), kde P = P {S #S}: 1 Pro každou dvojici pravidel v P ve tvaru (a) A αx, B βx, (b) A αx, B ε, kde X BEFORE(B), (c) A ε, B ε, kde X BEFORE(A), X BEFORE(B), platí FOLLOW k (A) FOLLOW k (B) =. 2 Pro každou dvojici pravidel v P ve tvaru (a) A αx, B βxγ, (b) A ε, B βxγ, kde X BEFORE(A), (c) A ε, B γ, kde X BEFORE(A), X BEFORE(B), platí FOLLOW k (A) EFF k (γ FOLLOW k (B)) =.

Definice (Silná LR(k) gramatika (2)) Bezkontextová gramatika G = (N, T, P, S) je silná LR(k) gramatika, jestliže pro rozšířenou gramatiku G = (N {S }, T {#}, P, S ), kde P = P {S #S}: 1 Pro každou dvojici pravidel v P ve tvaru (a) A αx, B βx, (b) A αx, B ε, kde X BEFORE(B), (c) A ε, B ε, kde X BEFORE(A), X BEFORE(B), platí FOLLOW k (A) FOLLOW k (B) =. 2 Pro každou dvojici pravidel v P ve tvaru (a) A αx, B βxγ, (b) A ε, B βxγ, kde X BEFORE(A), (c) A ε, B γ, kde X BEFORE(A), X BEFORE(B), platí FOLLOW k (A) EFF k (γ FOLLOW k (B)) =.

S #E E E + T E T T T T F T/F F F n i (E) BEFORE(S) = {#} BEFORE(E) = {(, #} BEFORE(T) = {+,, (, #} BEFORE(F) = {, /, +,, (, #} Je silná LR(1)? FOLLOW(S) = {$} FOLLOW(E) = {+,, ), $} FOLLOW(T) = {, /, +,, ), $} FOLLOW(F) = {, /, +,, ), $} 1 Pro každou dvojici pravidel ve tvaru (a) A αx, B βx, musí platit FOLLOW k (A) FOLLOW k (B) =. Testujeme pravidla E E + T, E E T: FOLLOW(E) FOLLOW(E) Není silná LR(1).

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) BEFORE(S) = {#} BEFORE(E) = {(, #} BEFORE(A) = {(, #} BEFORE(T) = {A} BEFORE(B) = {A} BEFORE(F) = {B} FOLLOW(S) = {$} FOLLOW(E) = {+,, ), $} FOLLOW(A) = {n, i, (} FOLLOW(T) = {, /, +,, ), $} FOLLOW(B) = {n, i, (} FOLLOW(F) = {, /, +,, ), $} EFF(+ FOLLOW(A)) = {+} EFF(E FOLLOW(S)) = EFF(E) FOLLOW(F)) = EFF(T FOLLOW(E)) = EFF(AT FOLLOW(E)) = EFF(BF FOLLOW(T)) =

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = 1 Pro každou dvojici pravidel v P ve tvaru (a) A αx, B βx, (b) A αx, B ε, kde X BEFORE(B), (c) A ε, B ε, kde X BEFORE(A), X BEFORE(B), platí FOLLOW k (A) FOLLOW k (B) =. 1 (a) Není co testovat, žádná dvě pravidla nekončí stejně.

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = 1 Pro každou dvojici pravidel v P ve tvaru (a) A αx, B βx, (b) A αx, B ε, kde X BEFORE(B), (c) A ε, B ε, kde X BEFORE(A), X BEFORE(B), platí FOLLOW k (A) FOLLOW k (B) =. 1 (b) Není co testovat, na konci žádného pravidla se nevyskytují prvky množiny BEFORE(A) ani BEFORE(B).

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = 1 Pro každou dvojici pravidel v P ve tvaru (a) A αx, B βx, (b) A αx, B ε, kde X BEFORE(B), (c) A ε, B ε, kde X BEFORE(A), X BEFORE(B), platí FOLLOW k (A) FOLLOW k (B) =. 1 (c) Není co testovat, množiny BEFORE(A) a BEFORE(B) mají prázdný průnik.

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = 2 Pro každou dvojici pravidel v P ve tvaru (a) A αx, B βxγ, platí FOLLOW k (A) EFF k (γ FOLLOW k (B)) =.

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = 2 Pro každou dvojici pravidel v P ve tvaru (a) A αx, B βxγ, platí FOLLOW k (A) EFF k (γ FOLLOW k (B)) =. S E, A E+ S E, A E S E, F (E) E AT, B T E AT, B T/ FOLLOW(S) EFF(+ FOLLOW(A)) = FOLLOW(S) EFF( FOLLOW(A)) = FOLLOW(S) EFF( ) FOLLOW(F)) = FOLLOW(E) EFF( FOLLOW(B)) = FOLLOW(E) EFF(/ FOLLOW(B)) =

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = 2 Pro každou dvojici pravidel v P ve tvaru (b) A ε, B βxγ, kde X BEFORE(A), platí FOLLOW k (A) EFF k (γ FOLLOW k (B)) =.

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = 2 Pro každou dvojici pravidel v P ve tvaru (b) A ε, B βxγ, kde X BEFORE(A), platí FOLLOW k (A) EFF k (γ FOLLOW k (B)) =. A ε, S #E A ε, F (E) B ε, E AT FOLLOW(A) EFF(E FOLLOW(S)) = FOLLOW(A) EFF(E) FOLLOW(F)) = FOLLOW(B) EFF(T FOLLOW(E)) =

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = 2 Pro každou dvojici pravidel v P ve tvaru (c) A ε, B γ, kde X BEFORE(A), X BEFORE(B), platí FOLLOW k (A) EFF k (γ FOLLOW k (B)) =.

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = 2 Pro každou dvojici pravidel v P ve tvaru (c) A ε, B γ, kde X BEFORE(A), X BEFORE(B), platí FOLLOW k (A) EFF k (γ FOLLOW k (B)) =. A ε, S #E A ε, E AT B ε, T BF FOLLOW(A) EFF(#E FOLLOW(S)) = FOLLOW(A) EFF(AT FOLLOW(E)) = FOLLOW(B) EFF(BF FOLLOW(T)) =

S #E E AT A E+ E ε T BF B T T/ ε F n i (E) FL(S) = {$} FL(E) = {+,, ), $} FL(A) = {n, i, (} FL(T) = {, /, +,, ), $} FL(B) = {n, i, (} FL(F) = {, /, +,, ), $} BEF(S) = {#} BEF(E) = {(, #} BEF(A) = {(, #} BEF(T) = {A} BEF(B) = {A} BEF(F) = {B} EFF(+ FL(A)) = {+} EFF(E FL(S)) = EFF(E) FL(F)) = EFF(T FL(E)) = EFF(AT FL(E)) = EFF(BF FL(T)) = Je to silná LR(1) gramatika.