Principy překladačů Mezikód Jakub Yaghob.

Slides:



Advertisements
Podobné prezentace
Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení.
Advertisements

Aplikace teorie grafů Základní pojmy teorie grafů
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í.
Strukturované datové typy
Algoritmizace a programování Operátory a příkazy v Delphi - 07
Otázky k absolutoriu HW 1 - 5
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Programování PA - 2.
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.
Principy překladačů Architektury procesorů Jakub Yaghob.
Lexikální a syntaktická analýza Jakub Yaghob
MATLAB® ( Funkce v Matlabu ).
PHP PHP – základy syntaxe (část 1) - 03 Mgr. Josef Nožička IKT PHP
LOGISTICKÉ SYSTÉMY 8/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.
Informatika I 3. přednáška
Lestes C++ compiler. Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr.
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í.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
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.
Základy algoritmizace a programování
ORIENTOVANÉ GRAFY V této části se seznámíme s následujícími pojmy:
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Sémantická analýza Jakub Yaghob
Syntaxí řízený překlad
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
Predikátová logika.
Počítače a programování 1
JavaScript Podmínky, cykly a pole.
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,
Návrh a tvorba WWW Cvičení 4
Generování vnitřní reprezentace programu Miroslav Beneš Dušan Kolář.
STROMY Datová struktura sestávající z uzlů
Algoritmizace a programování Vývojové diagramy - 03
10. Dynamické proměnné Dynamická proměnná se nezavádí deklarací proměnných, ale vzniká za běhu programu provedením speciálního příkazu. Nemá přidělen žádný.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Konečné automaty Vít Fábera.
Databázové modelování
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Marek Malík a František Černý, ME4A, 2012
Základy operačních systémů
Výrok „Vypadá to, že jsme narazili na hranici toho, čeho je možné dosáhnout s počítačovými technologiemi. Člověk by si ale měl dávat pozor na takováto.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
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é.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
XSLT překladač Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Kontakty slajdy: ftp://ulita.ms.mff.cuni.cz/predn/POS.
Instrukce procesoru.
Základy programování mikropočítačů První program v jazyce symbolických adres.
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
Databáze ● úložiště dat s definovaným přístupem ● typy struktury – strom, sekvence, tabulka ● sestává z uspořádaných záznamů ● databáze – struktura – záznam.
Překladače 4. Lexikální analýza © Milan Keršlágerhttp:// Obsah: ● vstupní formáty,symboly.
Jednočipové počítače – instrukční sada
Překladače Syntaktická analýza
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
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Číslicová technika.
Překladače 6. Sémantická analýza
Toky v sítích.
Číselné soustavy a kódy
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Transkript prezentace:

Principy překladačů Mezikód Jakub Yaghob

Mezikód Přechodná reprezentace zdrojového kódu Odděluje front end od back endu Výhody mezikódu Různé back endy pro stejný vstupní jazyk – podpora různých procesorů gcc Různé front endy pro stejný výstupní jazyk – podpora více jazyků pro stejný stroj .NET Strojově nezávislé optimalizace nad mezikódem - HLO

Možné typy reprezentací Syntaktický strom Možný i DAG Postfixový zápis Linearizovaná reprezentace syntaktického stromu Hrany grafu nejsou přímo v zápisu, dají se zrekonstruovat z pořadí a počtu operandů operátoru Tříadresový kód Také linearizovaná reprezentace syntaktického stromu Vypadá jako instrukce procesoru x := y op z

Příklady – syntaktický strom a DAG a := b*-c+b*-c assign assign a + a + * * * b uminus b uminus b uminus c c c

Příklady – postfixový zápis a tříadresový kód a b c uminus * b c uminus * + assign t1 := -c t2 := b * t1 t3 := -c t4 := b * t3 t5 := t2 + t4 a := t5 t1 := -c t2 := b * t1 t5 := t2 + t2 a := t5

Operandy tříadresového kódu Jméno Proměnná Typ Další možná jména Konstanta Různé možné literály (celé číslo, řetězec, …) Přechodná proměnná Generovány překladačem Snadno si je lze představit jako registry CPU

Typy tříadresových instrukcí Binární aritmetické nebo logické operace Unární operace Přiřazení/kopie Nepodmíněný skok Podmíněný skok Mechanismus volání procedur/funkcí Parametry, volání, návrat Indexace pole Adresové operátory Vzetí adresy, dereference Deklarace

Implementace tříadresového kódu – čtveřice Záznam se čtyřmi položkami op, arg1, arg2, res Některé arg (typicky arg2) nebo i res nemusí být pro některé typy tříadresových instrukcí využity Operandy jsou odkazy do tabulek symbolů op arg1 arg2 res (0) uminus c t1 (1) * b t2 (2) t3 (3) t4 (4) + t5 (5) := a

Implementace tříadresového kódu – trojice Chceme se vyhnout generování přechodných jmen Záznam s třemi položkami op, arg1, arg2 Operandy jsou odkazy do tabulek symbolů (pro jména a konstanty) nebo odkaz na jinou trojici op arg1 arg2 (0) uminus c (1) * b (2) (3) (4) + (5) := a

Implementace tříadresového kódu – nepřímé trojice Jedno pole přímo s trojicemi Druhé pole s odkazy na trojici op arg1 arg2 (0) uminus c (1) * b [0] (2) (3) [2] (4) + [1] [3] (5) := a [4] stmt [0] (0) [1] (1) [2] (2) [3] (3) [4] (4) [5] (5)

Srovnání implementací Čtveřice Výhodnější pro optimalizování mezikódu Lze s nimi snadno pohybovat, jména zůstávají stejná Trojice Úspornější Špatná manipulace při optimalizaci – přečíslování v celém mezikódu Nepřímé trojice Lze s nimi dobře manipulovat při optimalizaci – změna pouze v druhém poli Zhruba stejně paměťově náročné, jako čtveřice

Graf toku řízení Grafová reprezentace tříadresového kódu Uzly jsou výpočty Orientované hrany představují tok řízení Vhodný pro optimalizace, ale i pro reprezentaci

Základní blok Souvislá sekvence tříadresového kódu, do které tok řízení vstoupí na začátku a vystoupí na úplném konci a nikde jinde Algoritmus na rozsekání sekvence tříadresového kódu na základní bloky Určení množiny vůdců Začátek sekvence je vůdce Každá instrukce mezikódu, která je cílem skoku, je vůdce Každá instrukce mezikódu, která následuje těsně po instrukci skoku, je vůdce Pro každého vůdce se základní blok sestává z vůdce a všech následujících tříadresových kódu až po dalšího vůdce (bez něj) nebo konec sekvence

Konstrukce grafu toku řízení Orientovaný graf Uzly jsou základní bloky Jeden ze základních bloků je počáteční – blok, jehož vůdce je první instrukcí mezikódu v sekvenci Mezi dvěma základními bloky B1 a B2 je orientovaná hrana z B1 do B2, pokud platí jedna z podmínek Poslední příkaz B1 je skok na vůdce B2 B2 následuje ihned za B1 a B1 nekončí nepodmíněným skokem

Příklad grafu toku řízení for(V1;V2;V3) P V1 V2 P V3 V1 V2 P V3

Životnost proměnné Tříadresová instrukce x := y op z definuje x a používá y a z Říkáme, že proměnná je živá v daném bodě mezikódu, pokud tento bod leží na nějaké cestě začínající bodem, kde byla definována, do nějakého bodu, kde byla použita, přičemž po této cestě nejsou žádné další definice