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

Podobné dokumenty
Jednoznačné a nejednoznačné gramatiky

Výpočetní modely pro rozpoznávání bezkontextových jazyků zásobníkové automaty LL(k) a LR(k) analyzátory

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

Syntaxí řízený překlad

Kapitola 6. LL gramatiky. 6.1 Definice LL(k) gramatik. Definice 6.3. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo.

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/39

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

/01: Teoretická informatika(ti) přednáška 5

Formální jazyky a gramatiky Teorie programovacích jazyků

Implementace LL(1) překladů

Turingovy stroje. Teoretická informatika Tomáš Foltýnek

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Vztah jazyků Chomskeho hierarchie a jazyků TS

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

Čísla značí použité pravidlo, šipka směr postupu Analýza shora. Analýza zdola A 2 B 3 B * C 2 C ( A ) 1 a A + B. A Derivace zleva:

Automaty a gramatiky

Návrh algoritmů pro sémantické akce při výstavbě interpretu metodou rekurzivního sestupu

Bezkontextové jazyky 2/3. Bezkontextové jazyky 2 p.1/27

/1: Teoretická informatika(ti) přednáška 4

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

2 Formální jazyky a gramatiky

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Poslední aktualizace: 26. října 2011

Bezkontextové gramatiky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května / 49

Na rozšiřující přednášce minulý týden jsme se věnovali zejména. algoritmu, který k zadanému konečnému automatu sestrojí ekvivalentní regulární výraz

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/31

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č?

Syntaxí řízený překlad

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Západočeská univerzita FAKULTA APLIKOVANÝCH VĚD

popel, glum & nepil 16/28

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

63. ročník Matematické olympiády 2013/2014

Překladač a jeho struktura

Úvod do informatiky. Miroslav Kolařík

Operační výzkum. Síťová analýza. Metoda CPM.

Interpolace, ortogonální polynomy, Gaussova kvadratura

Z. Sawa (VŠB-TUO) Teoretická informatika 5. listopadu / 43

Formální jazyky a automaty Petr Šimeček

4.2 Syntaxe predikátové logiky

f(c) = 0. cn pro f(c n ) > 0 b n pro f(c n ) < 0

5 Orientované grafy, Toky v sítích

Automaty a gramatiky. Uzávěrové vlastnosti v kostce R J BKJ DBKJ. Roman Barták, KTIML. Kvocienty s regulárním jazykem

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Suffixové stromy. Osnova:

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

Systém přirozené dedukce výrokové logiky

Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...

1. Posloupnosti čísel

PŘEDNÁŠKA 5 Konjuktivně disjunktivní termy, konečné distributivní svazy

BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS MASTER S THESIS AUTHOR

Spojitost a limita funkce

SYNTAKTICKÁ ANALÝZA ZALOŽENÁ NA GRAMATICKÝCH A AUTOMATOVÝCH SYSTÉMECH PARSING BASED ON GRAMMAR AND AUTOMATA SYSTEMS

Derivace funkcí více proměnných

Referát z předmětu Teoretická informatika

Projektový management

Překladač sestrojující k regulárnímu výrazu ekvivalentní konečný automat Připomeňme si jednoznačnou gramatiku G pro jazyk RV({a, b})

Dynamické programování

Morfologická analýza Bezkontextové gramatiky

Syntaktická analýza založená na multigenerativních systémech Závěrečná práce z předmětu TJD. Jakub Martiško

Limita a spojitost funkce a zobrazení jedné reálné proměnné

Strukturální rozpoznávání

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ

PŘEDNÁŠKA 2 POSLOUPNOSTI

Kostry. 9. týden. Grafy. Marie Demlová (úpravy Matěj Dostál) 16. dubna 2019

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY SYNTAKTICKÁ ANALÝZA ZALOŽENÁ NA MULTIGENEROVÁNÍ PARSING BASED ON MULTIGENERATION

Složitost Filip Hlásek

Základy teoretické informatiky Formální jazyky a automaty

Regulární výrazy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března / 20

Univerzální Turingův stroj a Nedeterministický Turingův stroj

6. Zobrazení δ: (a) δ(q 0, x) obsahuje x i, x i Z. (b) δ(x i, y) obsahuje y j, x i y j P 7. Množina F je množinou koncových stavů.

1. Jordanův kanonický tvar

ALGORITMY A DATOVÉ STRUKTURY

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

TÉMATICKÝ OKRUH TZD, DIS a TIS

základů algoritmizace

α = 210 A x =... kn A y =... kn A M =... knm

prof. RNDr. Čestmír Burdík DrCs. prof. Ing. Edita Pelantová CSc. BI-ZMA ZS 2009/2010

Základy matematické analýzy

4EK311 Operační výzkum. 5. Teorie grafů

Poslední aktualizace: 14. října 2011

Postův korespondenční problém. Meze rozhodnutelnosti 2 p.1/13

Automaty a gramatiky. Roman Barták, KTIML. Separované gramatiky. Kontextové gramatiky. Chomského hierarchie

Obsah. Aplikovaná matematika I. Gottfried Wilhelm Leibniz. Základní vlastnosti a vzorce

Stromy, haldy, prioritní fronty

Bezkontextové jazyky 3/3. Bezkontextové jazyky 3 p.1/27

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Výroková a predikátová logika - III

Teorie grafů. Kostra grafu. Obsah. Radim Farana Podklady pro výuku pro akademický rok 2013/2014

Jak funguje asymetrické šifrování?

Programování v čistém Prologu

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Teoretická informatika

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Věta 12.3 : Věta 12.4 (princip superpozice) : [MA1-18:P12.7] rovnice typu y (n) + p n 1 (x)y (n 1) p 1 (x)y + p 0 (x)y = q(x) (6)

Vysoké učení technické v Brně Fakulta informačních technologií. Gramatiky nad volnými grupami Petr Blatný

Naproti tomu gramatika je vlastně soupis pravidel, jak

Transkript:

Metody a nástroje syntaktické analýzy Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 14. října 2011

Vlastnosti syntaktické analýzy Úkoly syntaktické analýzy Úkolem syntaktického analyzátoru je zjistit, jak symboly patří k sobě, tedy sestavit syntaktickou strukturu programu. Symboly jsou zde jakýmisi slovy, ze kterých je třeba sestavit větu strukturu programu. Vstup: posloupnost symbolů Výstup: syntaktická struktura programu (derivační strom) Syntaktické chyby: souvisí se syntaktickou strukturou celého programu, chybná posloupnost symbolů (např. 25 := x + 1)

Vlastnosti syntaktické analýzy Úkoly syntaktické analýzy Úkolem syntaktického analyzátoru je zjistit, jak symboly patří k sobě, tedy sestavit syntaktickou strukturu programu. Symboly jsou zde jakýmisi slovy, ze kterých je třeba sestavit větu strukturu programu. Vstup: posloupnost symbolů Výstup: syntaktická struktura programu (derivační strom) Syntaktické chyby: souvisí se syntaktickou strukturou celého programu, chybná posloupnost symbolů (např. 25 := x + 1)

Definice Definice (Derivační strom) Derivační strom derivace podle gramatiky G je orientovaný acyklický graf, který má jediný kořen, do všech ostatních uzlů vstupuje právě jedna hrana, a dále má tyto vlastnosti: 1 Kořen stromu je ohodnocen startovacím symbolem gramatiky. 2 Listy jsou ohodnoceny terminálními symboly, všechny ostatní uzly jsou ohodnoceny neterminálními symboly. 3 Všechny koncové uzly v jakékoliv fázi konstrukce čtené zleva doprava tvoří větnou formu v gramatice G. 4 Jestliže uzly n 1, n 2,..., n k jsou bezprostřední následníci uzlu n, jsou ohodnoceny symboly 1, 2,..., k a uzel n je ohodnocen, pak v množině pravidel gramatiky existuje pravidlo 1 2... k. Není třeba značit orientaci hran.

Konstrukce G = ({S}, {n, i, +, }, P, S), P = {S S + S S S n i} Derivace D1: S S S => S + S S n + S S n + n S n + n i Derivace D2: S S S => S + S S S + S i S + n i n + n i Derivace D3: S S + S => S + S S n + S S n + n S n + n i D1, D2: S S S S + S i D3: S + S n S S S n n n i

Konstrukce G = ({S}, {n, i, +, }, P, S), P = {S S + S S S n i} Derivace D1: S S S => S + S S n + S S n + n S n + n i Derivace D2: S S S => S + S S S + S i S + n i n + n i Derivace D3: S S + S => S + S S n + S S n + n S n + n i D1, D2: S S S S + S i D3: S + S n S S S n n n i

Konstrukce G = ({S}, {n, i, +, }, P, S), P = {S S + S S S n i} Derivace D1: S S S => S + S S n + S S n + n S n + n i Derivace D2: S S S => S + S S S + S i S + n i n + n i Derivace D3: S S + S => S + S S n + S S n + n S n + n i D1, D2: S S S S + S i D3: S + S n S S S n n n i

Konstrukce G = ({S}, {n, i, +, }, P, S), P = {S S + S S S n i} Derivace D1: S S S => S + S S n + S S n + n S n + n i Derivace D2: S S S => S + S S S + S i S + n i n + n i Derivace D3: S S + S => S + S S n + S S n + n S n + n i D1, D2: S S S S + S i D3: S + S n S S S n n n i

Konstrukce G = ({S}, {n, i, +, }, P, S), P = {S S + S S S n i} Derivace D1: S S S => S + S S n + S S n + n S n + n i Derivace D2: S S S => S + S S S + S i S + n i n + n i Derivace D3: S S + S => S + S S n + S S n + n S n + n i D1, D2: S S S S + S i D3: S + S n S S S n n n i

Konstrukce Jednoznačnost gramatiky Definice (Jednoznačná a víceznačná gramatika) Gramatika je jednoznačná, pokud pro každý terminální řetězec, který lze v gramatice vygenerovat (tj. větu), existuje právě jeden derivační strom. Gramatika je víceznačná, pokud existuje terminální řetězec patřící do jazyka této gramatiky, ke kterému lze sestrojit více různých derivačních stromů. Zajištění jednoznačnosti podmínkou pro derivaci Když v každém kroku derivace přepisujeme vždy nejlevější neterminál (ten, který je ve větné formě nejvíce vlevo), používáme levou derivaci, když přepisujeme vždy neterminál nejvíce v pravo, používáme pravou derivaci.

Konstrukce Jednoznačnost gramatiky Definice (Jednoznačná a víceznačná gramatika) Gramatika je jednoznačná, pokud pro každý terminální řetězec, který lze v gramatice vygenerovat (tj. větu), existuje právě jeden derivační strom. Gramatika je víceznačná, pokud existuje terminální řetězec patřící do jazyka této gramatiky, ke kterému lze sestrojit více různých derivačních stromů. Zajištění jednoznačnosti podmínkou pro derivaci Když v každém kroku derivace přepisujeme vždy nejlevější neterminál (ten, který je ve větné formě nejvíce vlevo), používáme levou derivaci, když přepisujeme vždy neterminál nejvíce v pravo, používáme pravou derivaci.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 1 shora dolů (Top-Down), začínáme startovacím symbolem, podle levé derivace (vždy nejlevější symbol), pravidla gramatiky: ve stromě z neterminálu tvoříme podřetězec, na který se přepisuje, strom konstruujeme podle derivace zleva doprava, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 1 shora dolů (Top-Down), začínáme startovacím symbolem, podle levé derivace (vždy nejlevější symbol), pravidla gramatiky: ve stromě z neterminálu tvoříme podřetězec, na který se přepisuje, strom konstruujeme podle derivace zleva doprava, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 1 shora dolů (Top-Down), začínáme startovacím symbolem, podle levé derivace (vždy nejlevější symbol), pravidla gramatiky: ve stromě z neterminálu tvoříme podřetězec, na který se přepisuje, strom konstruujeme podle derivace zleva doprava, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 1 shora dolů (Top-Down), začínáme startovacím symbolem, podle levé derivace (vždy nejlevější symbol), pravidla gramatiky: ve stromě z neterminálu tvoříme podřetězec, na který se přepisuje, strom konstruujeme podle derivace zleva doprava, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 1 shora dolů (Top-Down), začínáme startovacím symbolem, podle levé derivace (vždy nejlevější symbol), pravidla gramatiky: ve stromě z neterminálu tvoříme podřetězec, na který se přepisuje, strom konstruujeme podle derivace zleva doprava, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 2 zdola nahoru (Bottom-Up). začínáme odspoda, od terminálního slova, podle pravé derivace, stavíme strom směrem k startovacímu symbolu, pravidla gramatiky: ve stromě nahrazujeme podřetězec neterminálem, který se na něj přepisuje, strom konstruujeme podle derivace pozpátku, zprava doleva, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 2 zdola nahoru (Bottom-Up). začínáme odspoda, od terminálního slova, podle pravé derivace, stavíme strom směrem k startovacímu symbolu, pravidla gramatiky: ve stromě nahrazujeme podřetězec neterminálem, který se na něj přepisuje, strom konstruujeme podle derivace pozpátku, zprava doleva, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 2 zdola nahoru (Bottom-Up). začínáme odspoda, od terminálního slova, podle pravé derivace, stavíme strom směrem k startovacímu symbolu, pravidla gramatiky: ve stromě nahrazujeme podřetězec neterminálem, který se na něj přepisuje, strom konstruujeme podle derivace pozpátku, zprava doleva, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 2 zdola nahoru (Bottom-Up). začínáme odspoda, od terminálního slova, podle pravé derivace, stavíme strom směrem k startovacímu symbolu, pravidla gramatiky: ve stromě nahrazujeme podřetězec neterminálem, který se na něj přepisuje, strom konstruujeme podle derivace pozpátku, zprava doleva, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 2 zdola nahoru (Bottom-Up). začínáme odspoda, od terminálního slova, podle pravé derivace, stavíme strom směrem k startovacímu symbolu, pravidla gramatiky: ve stromě nahrazujeme podřetězec neterminálem, který se na něj přepisuje, strom konstruujeme podle derivace pozpátku, zprava doleva, vstup čteme zleva doprava.

Rozdělení Metody syntaktické analýzy Dvě základní metody Rozlišujeme podle směru konstrukce derivačního stromu metody 2 zdola nahoru (Bottom-Up). začínáme odspoda, od terminálního slova, podle pravé derivace, stavíme strom směrem k startovacímu symbolu, pravidla gramatiky: ve stromě nahrazujeme podřetězec neterminálem, který se na něj přepisuje, strom konstruujeme podle derivace pozpátku, zprava doleva, vstup čteme zleva doprava.

Příklad Příklad S B ab ab B cb c 1 2, 3 4, 5 Levá derivace: S B abb aabbb aabbcb aabbcc

Příklad S B abb aabbb aabbcb aabbcc S B

Příklad S B abb aabbb aabbcb aabbcc S S B B a b

Příklad S B abb aabbb aabbcb aabbcc S S B B a b S B a b a b

Příklad S B abb aabbb aabbcb aabbcc S S B B a b S S B B a b a b c B a b a b

Příklad S B abb aabbb aabbcb aabbcc S S B B a b S S S B B B a b a b c B a b c B a b a b a b c

Definice Definice výstupu Definice (Lineární rozklad, levý rozklad) Lineární rozklad věty v gramatice G je některá posloupnost čísel pravidel použitých v derivaci věty v gramatice G. Levý rozklad věty v gramatice G je posloupnost čísel pravidel použitých v levé derivaci této věty v gramatice G.

Definice Příklad S B ab ab B cb c 1 2, 3 4, 5 Levá derivace: S B abb aabbb aabbcb aabbcc Levý rozklad slova aabbcc je posloupnost 1, 2, 3, 4, 5.

Definice Definice analýzy Definice ( metodou shora dolů) metodou shora dolů je proces nalezení levého rozkladu dané věty.

Determinismus Řešení nedeterminismu α 1 α 2... α n 1. nalýza s návratem Postupně zkoušíme vhodná pravidla. Nejdřív první, pokračujeme dále ve výpočtu, a když se ukáže, že pravidlo nevyhovuje (dostaneme se do slepé uličky), vrátíme se zpátky a vyzkoušíme druhé pravidlo, když to nevyhovuje, tak třetí,... Pomalá, proto se moc nepoužívá. 2. Deterministická analýza Při výběru pravidla se řídíme dalšími informacemi. 1 kontrolujeme vstupní posloupnost symbolů a řídíme se tím, co později dostaneme na vstupu, 2 kontrolujeme obsah zásobníku (nejen ten symbol, který vyjímáme v každém kroku).

Determinismus Řešení nedeterminismu α 1 α 2... α n 1. nalýza s návratem Postupně zkoušíme vhodná pravidla. Nejdřív první, pokračujeme dále ve výpočtu, a když se ukáže, že pravidlo nevyhovuje (dostaneme se do slepé uličky), vrátíme se zpátky a vyzkoušíme druhé pravidlo, když to nevyhovuje, tak třetí,... Pomalá, proto se moc nepoužívá. 2. Deterministická analýza Při výběru pravidla se řídíme dalšími informacemi. 1 kontrolujeme vstupní posloupnost symbolů a řídíme se tím, co později dostaneme na vstupu, 2 kontrolujeme obsah zásobníku (nejen ten symbol, který vyjímáme v každém kroku).

Příklad Příklad S B ab ab B cb c 1 2, 3 4, 5 Pravá derivace: S B cb cc abcc aabbcc

Příklad S B cb cc abcc aabbcc a a b b c c

Příklad S B cb cc abcc aabbcc a a b b c c a a b b c c

Příklad S B cb cc abcc aabbcc a a b b c c a a b b c c B a a b b c c

Příklad S B cb cc abcc aabbcc a a b b c c a a b b c c B B B a a b b c c a a b b c c

Příklad S B cb cc abcc aabbcc a a b b c c a a b b c c S B B B B B a a b b c c a a b b c c a a b b c c

Definice Definice (Pravý rozklad) Pravý rozklad věty v gramatice G je obrácená posloupnost čísel pravidel použitých v pravé derivaci této věty v gramatice G.

Definice Příklad S B ab ab B cb c 1 2, 3 4, 5 Pravá derivace: S B cb cc abcc aabbcc V derivaci jsme použili postupně pravidla 1, 4, 5, 2, 3, pravý rozklad věty aabbcc posloupnost čísel 3, 2, 5, 4, 1.

Definice Definice ( metodou zdola nahoru) metodou zdola nahoru je proces nalezení pravého rozkladu dané věty.

Determinismus Řešení nedeterminismu pravidla, jejichž pravé strany stejně začínají, resp. podřetězce na vstupu 1. nalýza s návratem Vybereme ve větné formě podřetězec (co nejvíc vlevo, je co nejdelší a je shodný s pravou stranou některého pravidla), přepíšeme neterminálem na pravé straně pravidla a pokračujeme v konstrukci derivačního stromu. Když zjistíme, že tento krok nevede k úspěchu, vyzkoušíme jiný podřetězec,... Pomalé, nepoužíváme. 2. Deterministická analýza Využíváme další informace získané při překladu obsah nepřečtené části vstupní pásky nebo obsah zásobníku.

Determinismus Řešení nedeterminismu pravidla, jejichž pravé strany stejně začínají, resp. podřetězce na vstupu 1. nalýza s návratem Vybereme ve větné formě podřetězec (co nejvíc vlevo, je co nejdelší a je shodný s pravou stranou některého pravidla), přepíšeme neterminálem na pravé straně pravidla a pokračujeme v konstrukci derivačního stromu. Když zjistíme, že tento krok nevede k úspěchu, vyzkoušíme jiný podřetězec,... Pomalé, nepoužíváme. 2. Deterministická analýza Využíváme další informace získané při překladu obsah nepřečtené části vstupní pásky nebo obsah zásobníku.

Souhrn Pomocné množiny pro syntaktickou analýzu FIRST(α) množina terminálů, kterými mohou začínat řetězce odvozené z α α bxayγ = b FIRST(α) FOLLOW() množina terminálů, které mohou následovat za v některé větné formě v derivacích. S bxcyz = y FOLLOW() Vytváříme vždy pro všechny neterminály zároveň!!! FIRST k (α), FOLLOW k () podobné, jen zobecnění na množiny terminálních řetězců o délce nejvýše k

Souhrn Pomocné množiny pro syntaktickou analýzu FIRST(α) množina terminálů, kterými mohou začínat řetězce odvozené z α α bxayγ = b FIRST(α) FOLLOW() množina terminálů, které mohou následovat za v některé větné formě v derivacích. S bxcyz = y FOLLOW() Vytváříme vždy pro všechny neterminály zároveň!!! FIRST k (α), FOLLOW k () podobné, jen zobecnění na množiny terminálních řetězců o délce nejvýše k

Souhrn Pomocné množiny pro syntaktickou analýzu FIRST(α) množina terminálů, kterými mohou začínat řetězce odvozené z α α bxayγ = b FIRST(α) FOLLOW() množina terminálů, které mohou následovat za v některé větné formě v derivacích. S bxcyz = y FOLLOW() Vytváříme vždy pro všechny neterminály zároveň!!! FIRST k (α), FOLLOW k () podobné, jen zobecnění na množiny terminálních řetězců o délce nejvýše k

FIRST, FOLLOW Pomocné množiny pro syntaktickou analýzu Definice (Množiny FIRST) Označme α libovolnou větnou formu generovanou gramatikou G. Potom FIRST(α) je množina terminálních symbolů, jimiž začínají řetězce derivované z α. Pokud existuje derivace α ε, pak ε FIRST(α).

FIRST, FOLLOW Pomocné množiny pro syntaktickou analýzu Definice (Množiny FOLLOW) Nechť je libovolný neterminál gramatiky G. Potom do množiny FOLLOW() řadíme právě ty terminální symboly a gramatiky G, které se mohou vyskytovat bezprostředně vpravo od v nějaké větné formě, tedy existuje derivace S βaγ. Pokud je v některé derivaci symbol posledním symbolem větné formy, do množiny FOLLOW() řadíme také symbol ukončení vstupního řetězce (reprezentující například konec zdrojového souboru), který budeme značit $.

FIRST, FOLLOW Označme N 1 množinu všech neterminálních symbolů, pro které existuje ε-pravidlo (nejen přímo ε). V gramatice G = (N, T, P, S): FIRST(ε) = {ε} FIRST(aβ) = {a}, a T FIRST(β) = FIRST(α i ) i=1..n pro / N 1, α 1 α 2... α n, ( ) FIRST(β) = FIRST(α i ) {ε} FIRST(β) i=1..n pro N 1, α 1 α 2... α n

FIRST, FOLLOW Příklad FIRST G = (N, T, P, S) S ab BcB ε fabd as ε B bcb d FIRST(ab) = {a} FIRST(BcB) = {b, d} FIRST(cB) = {f, a, c} FIRST(S) = {a, b, d, ε} FIRST(S) = {f, a, b, d, ε}

FIRST, FOLLOW V gramatice G = (N, T, P, S): $ FOLLOW(S) FIRST(β) FOLLOW(B), kde αbβ FOLLOW() FOLLOW(B), kde αbβ, β ε

FIRST, FOLLOW 1) Do FOLLOW(S), kde S je startovací symbol gramatiky, vložíme symbol konce vstupního řetězce $. 2) Pro všechna pravidla gramatiky αbβ umístíme všechny prvky množiny FIRST(β) kromě ε do FOLLOW(B). Tento krok provádíme postupně pro všechna pravidla gramatiky hledáme v nich neterminály, za kterými ještě něco následuje (β), a pak vše, čím může začínat řetězec vytvořený z β, může následovat v nějaké větné formě přímo za B. 3) Rekurzívně, dokud dochází ke změnám: pro každé pravidlo αb nebo αbβ, kde existuje odvození β ε, do množiny FOLLOW(B) zařadíme všechny prvky FOLLOW(). Obsah množin FOLLOW vlastně posíláme po derivačním stromě větné formy směrem dolů vždy nejvíce vpravo, pokud je na tom místě neterminál.

FIRST, FOLLOW 1) Do FOLLOW(S), kde S je startovací symbol gramatiky, vložíme symbol konce vstupního řetězce $. 2) Pro všechna pravidla gramatiky αbβ umístíme všechny prvky množiny FIRST(β) kromě ε do FOLLOW(B). Tento krok provádíme postupně pro všechna pravidla gramatiky hledáme v nich neterminály, za kterými ještě něco následuje (β), a pak vše, čím může začínat řetězec vytvořený z β, může následovat v nějaké větné formě přímo za B. 3) Rekurzívně, dokud dochází ke změnám: pro každé pravidlo αb nebo αbβ, kde existuje odvození β ε, do množiny FOLLOW(B) zařadíme všechny prvky FOLLOW(). Obsah množin FOLLOW vlastně posíláme po derivačním stromě větné formy směrem dolů vždy nejvíce vpravo, pokud je na tom místě neterminál.

FIRST, FOLLOW 1) Do FOLLOW(S), kde S je startovací symbol gramatiky, vložíme symbol konce vstupního řetězce $. 2) Pro všechna pravidla gramatiky αbβ umístíme všechny prvky množiny FIRST(β) kromě ε do FOLLOW(B). Tento krok provádíme postupně pro všechna pravidla gramatiky hledáme v nich neterminály, za kterými ještě něco následuje (β), a pak vše, čím může začínat řetězec vytvořený z β, může následovat v nějaké větné formě přímo za B. 3) Rekurzívně, dokud dochází ke změnám: pro každé pravidlo αb nebo αbβ, kde existuje odvození β ε, do množiny FOLLOW(B) zařadíme všechny prvky FOLLOW(). Obsah množin FOLLOW vlastně posíláme po derivačním stromě větné formy směrem dolů vždy nejvíce vpravo, pokud je na tom místě neterminál.

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d 1) 2) 3) 4) 5) 6) 7) 8) FOLLOW(S) = { $, b, c } FOLLOW() = { b, c } FOLLOW(B) = { f, a, c, d, $, b }

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d 1) 2) 3) 4) 5) 6) 7) 8) FOLLOW(S) = { $, b, c } FOLLOW() = { b, c } FOLLOW(B) = { f, a, c, d, $, b }

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d 1) 2) 3) 4) 5) 6) 7) 8) FOLLOW(S) = { $, b, c } FOLLOW() = { b, c } FOLLOW(B) = { f, a, c, d, $, b }

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d 1) 2) 3) 4) 5) 6) 7) 8) FOLLOW(S) = { $, b, c } FOLLOW() = { b, c } FOLLOW(B) = { f, a, c, d, $, b }

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d 1) 2) 3) 4) 5) 6) 7) 8) FOLLOW(S) = { $, b, c } FOLLOW() = { b, c } FOLLOW(B) = { f, a, c, d, $, b }

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d 1) 2) 3) 4) 5) 6) 7) 8) FOLLOW(S) = { $, b, c } FOLLOW() = { b, c } FOLLOW(B) = { f, a, c, d, $, b }

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d 1) 2) 3) 4) 5) 6) 7) 8) FOLLOW(S) = { $, b, c } FOLLOW() = { b, c } FOLLOW(B) = { f, a, c, d, $, b }

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d 1) 2) 3) 4) 5) 6) 7) 8) FOLLOW(S) = { $, b, c } FOLLOW() = { b, c } FOLLOW(B) = { f, a, c, d, $, b }

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d 1) 2) 3) 4) 5) 6) 7) 8) FOLLOW(S) = { $, b, c } FOLLOW() = { b, c } FOLLOW(B) = { f, a, c, d, $, b }

FIRST, FOLLOW Příklad S ab BcB ε fabd as ε B bcb d FOLLOW(S) = {$, b, c} FOLLOW() = {b, c} FOLLOW(B) = {f, a, c, d, $, b}