Překladače 5. Syntaktická analýza

Slides:



Advertisements
Podobné prezentace
Algoritmy zpracování textů II
Advertisements

GRAMATIKY Bori · Brkos 2011.
Algoritmizace Vývojové diagramy.
Aplikace teorie grafů Základní pojmy teorie grafů
ALGO – Algoritmizace 1. cvičení
Síťová analýza RNDr. Jiří Dvořák, CSc.
Varianty Turingova stroje Výpočet funkcí pomocí TS
Principy překladačů Mezikód Jakub Yaghob.
Algoritmy zpracování textů II
Lexikální a syntaktická analýza Jakub Yaghob
FORMALIZACE PROJEKTU DO SÍŤOVÉHO GRAFU
LOGISTICKÉ SYSTÉMY 7/14.
1IT S ÍŤOVÝ DATOVÝ MODEL Ing. Jiří Šilhán. S ÍŤOVÝ DATOVÝ MODEL Je historicky nejstarším datovým modelem. Jeho základem jsou vzájemně propojené množiny.
SWI072 Algoritmy komprese dat1 Algoritmy komprese dat Adaptivní Huffmanův kód.
SÍŤOVÁ ANALÝZA.
Příklady použití zásobníkového automatu
SWI072 Algoritmy komprese dat1 Algoritmy komprese dat Statistické metody komprese dat a Shannon-Fanův kód.
REDUKCE DAT Díváme-li se na soubory jako na text, pak je tento text redundantní. Redundance vyplývá z:  některé fráze nebo slova se opakují  existuje.
SWI072 Algoritmy komprese dat1 Algoritmy komprese dat Teorie informace.
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
Algoritmizace a základy programování
ORIENTOVANÉ GRAFY V této části se seznámíme s následujícími pojmy:
Formální jazyky a gramatiky
Abeceda a formální jazyk
Sémantická analýza Jakub Yaghob
Příklady jazyků Příklad 1: G=({S}, {0,1}, P, S)
Syntaxí řízený překlad
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
Stromy.
AUTOMATY Bori · Brkos Formální jazyk {a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb} nad abecedou {a, b}
Úvod do předmětu Opakování
Vztah bezkontextových jazyků a ZA
STROMY Datová struktura sestávající z uzlů
Regulární výrazy Regulární výrazy představují další možnost popisu regulárních jazyků (právě od nich dostaly své jméno). Definice: Množina všech regulárních.
Vztah mezi koloniemi s paralelním přepisováním Šárka Vavrečková
Konečné automaty Vít Fábera.
P-těžké, np-těžké a np-úplné problémy
Kompresní metoda ACB Associative Coder of Buyanovsky autor: George Buyanovsky připravil Tomáš Skopal podle knihy „Data Compression“ od D. Salomona, 1997,
Matematické metody optimalizace Tomáš Vaníček Katedra inženýrské informatiky Stavební fakulta ČVUT Thákurova 7, Praha 6 Dejvice, b407
Gymnázium, Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Hodonín Úvod do programování.
Škola:Gymnázium Václava Hlavatého, Louny, Poděbradova 661, příspěvková organizace Číslo projektu:CZ.1.07/1.5.00/ Název projektu:Inovace výuky Číslo.
Rozpoznávání v řetězcích
Turingův stroj.
Automaty a gramatiky.
Sylabus V rámci PNV budeme řešit konkrétní úlohy a to z následujících oblastí: Nelineární úlohy Řešení nelineárních rovnic Numerická integrace Lineární.
String-distributing systems Top-Down / Bottom-Up Ing. Zbyněk Křivka Školitel: Doc. Alexander Meduna.
Les, stromy a kostry Kružnice: sled, který začíná a končí ve stejném vrcholu, ostatní vrcholy jsou různé Souvislý graf: mezi každými dvěma vrcholy existuje.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)NP-úplné problémyGRA, LS 2012/13, Lekce 13 1 / 14 NP-ÚPLNÉ.
Formální definice Konečná množina vnitřních stavů Q Konečná vstupní abeceda A Počáteční stav q 0 Množina přijímacích stavů K.
Perzistence XML dat Kamil Toman
© Institut biostatistiky a analýz INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ ANALÝZA A KLASIFIKACE DAT prof. Ing. Jiří Holčík, CSc.
Hledání silně souvislý komponent Silně souvislá komponenta orientovaného grafu G= (V,E) je maximální množina uzlů UV taková že ∀ u,v ∈ V : u je dosažitelné.
Překladače Vnitřní struktura překladače © Milan Keršláger
Algoritmizace a programování Algoritmy 1 - Úvod. Základní pojmy Počítačový program Počítačový program zápis zdrojového kódu, kterému rozumí počítač zápis.
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
Překladače 6. Sémantická analýza
Překladače 4. Lexikální analýza © Milan Keršlágerhttp:// Obsah: ● vstupní formáty,symboly.
NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6.
Morfologická analýza Bezkontextové gramatiky
Překladače 5. Syntaktická analýza
STROMY A KOSTRY Stromy a kostry - odst. 3.2.
Překladače Syntaktická analýza
Množina bodů dané vlastnosti
Programování v jazyce C++
Operační systémy Vnitřní struktura překladače
PROLOG strategie vyhodnocení dotazu
Překladače Syntaktická analýza
Překladače 6. Sémantická analýza
Konstruktivní úlohy na rotačních plochách
Algoritmizace Dynamické programování
Transkript prezentace:

Překladače 5. Syntaktická analýza Obsah: vstup a výstup syntaktické analýzy derivační strom, odvození z gramatiky determinismus, víceznačné gramatiky metoda shora dolů a zdola nahoru řešení nejednoznačnosti pomocné množiny FIRST a FOLLOW © Milan Keršláger http://www.pslib.cz/ke/slajdy 28. 3. 2012 http://creativecommons.org/licenses/by-nc-nd/3.0/

Syntaktická analýza druhá fáze zpracování zdrojového kódu vstup: posloupnost symbolů dodává lexikální analyzátor výstup: derivační strom postihuje strukturu programu syntaktické chyby nesprávná posloupnost symbolů: 13:=celkem if a=1 else y:=x then y=a+1

Derivační strom derivační strom derivace v gramatice G je orientovaný acyklický graf s jediným kořenem do všech všech uzlů vstupuje 1 hrana (kromě kořene) kořen je ohodnocen startovacím symbolem gramatiky koncové uzly stromu → terminální symbol nebo ε ε – prázdný řetězec ostatní uzly ohodnoceny neterminálními symboly koncové uzly čtené zleva doprava tvoří větnou formu v gramatice G v kterékoliv fázi konstrukce derivační strom tvoříme zleva doprava a shora dolů, proto není potřeba značit orientaci hran

Příklad Máme bezkontextovou gramatiku G s pravidly P: G = ({S},{n,i,+,*},P,S) P = S → S+S | S*S | n | i Odvodíme větu n+n*i třemi různými derivacemi: D1: S → S*S → S+S*S → n+S*S → n+n*S → n+n*i D2: S → S*S → S+S*S → S+S*i → S+n*i → n+n*i D3: S → S+S → S+S*S → n+S*S → n+n*S → n+n*i

Derivace D1 S → S*S → S+S*S → n+S*S → n+n*S → n+n*i S S * S S + S i n

Derivace D2 S → S*S → S+S*S → S+S*i → S+n*i → n+n*i S S * S S + S i n

Derivace D3 S → S+S → S+S*S → n+S*S → n+n*S → n+n*i S S + S n S * S n

Porovnání derivačních stromů * S S + S S + S i n S * S n n n i Derivace D1 a D2 Derivace D3

Determinismus pro tutéž větu může existovat více der. stromů viz výše D1 a D3 různé derivace mohou mít stejný der. strom viz výše D1 a D2 → nedeterministický postup naprosto nevhodné pro programování algoritmus musí být deterministický determinismus → jednoznačnost gramatiky programovací jazyky bohužel takové nejsou gramatiky pro ně jsou víceznačné

Gramatiky jedno- a víceznačné jednoznačná gramatika pro každý terminální řetězec generovaný gramatikou existuje jeden derivační strom špatně se hledají víceznačná gramatika existuje terminální řetězec patřící do jazyka gramatiky, ke kterému lze sestrojit více der. stromů jednoznačnost dosáhneme stanovením dodatečných podmínek pro vytvoření derivace levá derivace → v řetězci přepisujeme nejlevější neterminál pravá derivace → přepisujeme neterminál nejvíce vpravo

Metody syntaktické analýzy metodu syntaktické analýzy definujeme podle postupu konstrukce derivačního stromu: metoda shora dolů (Top-Down) konstruujeme od kořene k listům a zleva doprava metoda zdola nahoru (Bottom-Up) postupujeme od listů ke kořeni, také zleva doprava

Příklad S → AB 1 A → aAb | ab 2, 3 B → cB | c 4, 5 přepisovací pravidla čísla pravidel S → AB 1 A → aAb | ab 2, 3 B → cB | c 4, 5 pro obě metody odvodíme aabbcc stačí ukládat čísla použitých pravidel zjednodušení výstupu syntaktické analýzy není nutné mít v paměti celý strom volbou použité metody definujeme LP derivaci → posloupnost je jednoznačná

Metoda shora dolů pravidla: S → AB 1 A → aAb | ab 2, 3 B → cB | c 4, 5 S → AB → aAbB → aabbB → aabbcB → aabbcc levý rozklad: 1, 2, 3, 4, 5 byla použita levá derivace derivační strom na následujícím obrázku

Metoda zdola nahoru pravidla: S → AB 1 A → aAb | ab 2, 3 B → cB | c 4, 5 aabbcc → aAbcc → Acc → AcB → AB → S pravý rozklad je obrácená posloupnost pravidel protože zprava doleva, ale automat čte zleva doprava automat tedy postup obrací (než je potřeba ke generování věty) pravý rozklad: 3, 2, 5, 4, 1 (použita pravá derivace) derivační strom na následujícím obrázku

aabbcc → aAbcc → Acc → AcB → AB → S

Řešení nejednoznačnosti program musí být deterministický při analýze hledáme pravidla pro vznik větné formy existují však pravidla se stejnou levou stranou (!) vzniká otázka, jaké pravidlo má být použito máme dvě možnosti analýza s návratem vyzkoušíme jedno z pravidel a když problém, vrátíme se příliš pomalé deterministická analýza nahlížení na další vstupující znak nebo kontrola symbolu(ů) pod vrcholem zásobníku používá se běžně

Pomocné množiny FIRST(α) α je libovolná větná forma generovaná gramatikou G FIRST je množina terminálních symbolů, jimiž začínají řetězce derivované z α (terminály i neterminály) pokud existuje pravidlo α → *ε, pak ε patří do FIRST FOLLOW(A) A je neterminál gramatiky G FOLLOW je množina terminálních symbolů a, které se mohou vyskytovat bezprostředně vpravo od A existuje tedy derivace S → *βAaγ pokud je A ukončující, do FOLLOW též $ (konec vstupu) určuje se vždy pro všechny neterminály (mny. jsou vzájemně závislé)

FIRSTK a FOLLOWK pro složitější gramatiky k určuje délku terminálních řetězců řazených do hledané množiny bez indexu uvažujeme k=1 u vyšších čísel nese množina více informací FIRST(Ba) – začínající na c nebo a FIRST2(BA) – umí například omezit začínající na c tak, že víme, že to může být cc nebo ca, ale ne však cb