Sémantická analýza Jakub Yaghob

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
Programování v C jazyku - SEMINÁŘ
Programovací jazyk C++
Programování funkcí v Excelu
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
HYPERTEXT PREPROCESSOR. PROGRAMOVÁNÍ. DEFINICE POJMŮ Problém Problém nevyřešený, nežádoucí stav obvykle vyžaduje nějaké řešení Neřešitelný problém Neřešitelný.
If-else, do-while, switch, operátory
Programování v C++ Cvičení.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Varianty Turingova stroje Výpočet funkcí pomocí TS
Principy překladačů Mezikód Jakub Yaghob.
PHP - Chybové hlášky Sommer David 1 IT.. Obsah Druhy chyb Jaké chyby PHP hlásí? Co s chybami? Programátorsko – psychologická pravidla.
Materiály k přednášce Úvod do programování Ondřej Čepek.
Principy překladačů Překladač Jakub Yaghob. Literatura a slajdy Aho, Sethi, Ullman: Compilers - Principles, Techniques and Tools, Addison-Wesley 1986.
Generování mezikódu Jakub Yaghob
Principy překladačů Vysokoúrovňové optimalizace Jakub Yaghob.
Lexikální a syntaktická analýza Jakub Yaghob
Optimalizace v simulačním modelování. Obecně o optimalizaci  Optimalizovat znamená maximalizovat nebo minimalizovat parametrech (např. počet obslužných.
Algoritmizace a programování
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Příklady použití zásobníkového automatu
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Základy algoritmizace a programování
Formální jazyky a gramatiky
Dynamické bloky AutoCAD® 2006 Projektování v elektroenergetice
Syntaxí řízený překlad
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
Ukázka odstranění rekurze Přemysl Tišer
Predikátová logika.
Počítače a programování 1
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Vzorec v buňce v tabulkovém procesoru Vzorec v buňce v tabulkovém procesoru Microsoft ® Excel Zpracovala : Dana Lišková 4.B
Výroková logika.
Informatika I 1. přednáška
Vztah bezkontextových jazyků a ZA
Dokumentace informačního systému
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.
Databázové modelování
doc. RNDr. Zdeněk Botek, CSc.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
A1PRG - Programování – Seminář Ing. Michal Řízení běhu programu 5 Verze
Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost 1. KŠPA Kladno, s. r. o., Holandská 2531, Kladno,
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Perzistence XML dat Kamil Toman
Překladače Vnitřní struktura překladače © Milan Keršláger
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
KURZ ALGORITMIZACE A PROGRAMOVÁNÍ V JAZYCE C Lekce č. 2: Základní pojmy Bc. Radek Libovický.
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.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Výukový materiál zpracován v rámci projektu
Překladače 5. Syntaktická analýza
Překladače Syntaktická analýza
Kurz algoritmizace a programování v jazyce C
Operační systémy Vnitřní struktura překladače
Kurz algoritmizace a programování v jazyce C
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
PROLOG strategie vyhodnocení dotazu
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Databázové systémy a SQL
Oblast platnosti identifikátoru (1)
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Překladače 6. Sémantická analýza
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Algoritmizace a datové struktury (14ASD)
Transkript prezentace:

Sémantická analýza Jakub Yaghob Principy překladačů Sémantická analýza Jakub Yaghob

Syntaxí řízené definice Každé symbol gramatiky má definovanou množinu atributů Lze to chápat jako záznam Atributy dvojího druhu Syntetizované Dědičné Atributy mohou reprezentovat cokoliv Hodnoty atributů definovány sémantickými pravidly přidaných k přepisovacím pravidlům gramatiky Podle grafu závislosti se určí pořadí vyhodnocení sémantických pravidel Vyhodnocení sémantických pravidel určí hodnoty atributů

Druhy atributů Každé přepisovací pravidlo A→α má definovanou množinu sémantických pravidel ve formě b=f(c1,…,ck), kde f je funkce a ci jsou atributy symbolů gramatiky daného přepisovacího pravidla b je syntetizovaný atribut neterminálu A b je dědičný atribut symbolu gramatiky z pravé strany daného přepisovacího pravidla

Atributová gramatika Derivační strom s hodnotami atributů se nazývá anotovaný (obarvený) derivační strom Atributová gramatika je syntaxí řízená definice, kde funkce v sémantických pravidlech nemají vedlejší efekty

Atributová gramatika pro pověstnou gramatiku E → ER + T E → T T → TR * F T → F F → ( E ) F → uint E.val = ER.val + T.val E.val = T.val T.val = TR.val * F.val T.val = F.val F.val = E.val F.val = uint.lexval

Příklad anotovaného derivačního stromu 3+4*5 E.val=23 E.val=3 + T.val=20 T.val=3 T.val=4 F.val=5 * F.val=3 F.val=4 uint.lexval=5 uint.lexval=3 uint.lexval=4

Syntetizované atributy Atribut neterminálu z levé strany přepisovacího pravidla je vypočten na základě atributů symbolů z pravé strany Běžně používány v praxi Např. výpočet výrazu Atributová gramatika, která používá pouze syntetizované atributy, se nazývá S-atributová gramatika (čistě syntetizovaná atributová gramatika) S-atributová gramatika se snadno použije při analýze zdola-nahoru Výpočet proběhne při redukci Atributy pro symbol jsou na zásobníku parseru

Dědičné atributy Hodnota dědičného atributu je vypočtena na základě atributů otce nebo atributů symbolů na stejné úrovni v derivačním stromě Používají se k vyjádření závislosti nějaké syntaktické konstrukce na kontextu Např. zda se identifikátor vyskytuje na levé nebo pravé straně přiřazení Vždy lze přepsat atributovou gramatiku tak, aby byla S-atributová

Příklad dědičných atributů D → T L ; T → int T → double L → LR , id L → id L.in = T.typ T.typ = int T.typ = double LR.in = L.in id.typ = L.in

Graf závislosti Konstrukce grafu závislosti Uzly jsou vytvořeny pro každý atribut každého uzlu anotovaného derivačního stromu Pro každé sémantické pravidlo b=f(c1,…,ck) sestroj orientovanou hranu z uzlu grafu závislosti pro ci do uzlu pro b

Pořadí výpočtu Najdeme topologické třídění DAGu, který vznikl konstrukcí grafu závislosti Pokud vznikne při konstrukci grafu závislosti kružnice, pak nelze určit pořadí výpočtu Jakékoliv topologické setřídění je dobré

L-atributová gramatika Jinak také známa jako jednoduše zleva-doprava 1-průchodová gramatika Atributová gramatika je L-atributová, pokud ∀ dědičný atribut symbolu Xj z A→X1…Xn závisí pouze na Atributech symbolů X1,…,Xj-1 (vlevo od Xj) Dědičných atributech A Lze využít pro výpočet atributů přímo při analýze shora-dolů Každá S-atributová gramatika je L-atributová

Průchody derivačním stromem Pokud atributová gramatika není L-atributová, není možné provést výpočet atributů přímo při parsování Je nutné samostatně zkonstruovat derivační strom a jako jedna z částí sémantické analýzy budou i průchody tímto derivačním stromem, které dopočítají atributy, které nešly spočítat během syntaxí řízeného překladu

Statická kontrola při překladu Kontrola typů Použití operátorů na špatný typ Násobení ukazatelů Kontrola toku řízení Zda je změna toku řízení oprávněná V C příkaz break, pokud nejsem ve switch nebo cyklu Kontrola jedinečnosti Některé objekty mohou být definovány právě jednou Návěští ve funkci, identifikátory globálních objektů Kontrola jmen Některé konstrukty mají mít stejné jméno na svém začátku i na konci Procedura v assembleru

Symbolické tabulky Tabulky, které stále rostou Konstanty Tabulky, které přibývají/ubývají během překladu Viditelnost identifikátorů v blocích Jednoduchá implementace Spojový seznam viditelností pro blok (zásobník) Používaná implementace „Obarvení“ identifikátorů jednoznačným číslem bloku

Chyby při překladu Překladač musí najít všechny chyby ve vstupním slově a nehlásit chyby, které tam nejsou Hlášení chyb Hlásit srozumitelně a přesně Zotavit se z chyb rychle a pokračovat v překladu Nesmí znatelně zpomalovat překlad korektních vstupů Zavlečené chyby Vzniknou nepřesným zotavením z předchozí chyby na místech, které původně chyby nebyly

Druhy chyb Lexikální chyby Syntaktické chyby Sémantické chyby Špatně definované lexikální elementy Neukončený řetězec na konci řádku Zotavení ignorováním Syntaktické chyby Vstupní slovo není v jazyce definovaném gramatikou Nespárované závorky Sémantické chyby Odpovídají statickým kontrolám Neexistující proměnná, špatný počet parametrů volání funkce, špatně použitý operátor na nějaký typ Logické chyby Chyby programátora Nekonečný cyklus, neinicializované proměnné

Zotavení ze syntaktických chyb Panický režim Množina skeletálních (záchytných) symbolů Při chybě se přeskakují všechny symboly, dokud se nenarazí na skeletální symbol Pak se parser převede do známého stavu Úprava pravidel Přidání, ubrání, nahrazení terminálu v přepisovacím pravidle Chybné přepisovací pravidlo Zvětšení gramatiky o obvyklé chyby s přidáním chybového hlášení Např. přiřazení v Pascalu