Generování mezikódu Jakub Yaghob

Slides:



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

GENEROVÁNÍ PSEUDONÁHODNÝCH ČÍSEL
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Programovací jazyk C++
Programování funkcí v Excelu
DATOVÝ TYP POLE.
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í.
C# pro začátečníky Mgr. Jaromír Osčádal
If-else, do-while, switch, operátory
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Principy překladačů Mezikód Jakub Yaghob.
Algoritmizace a programování
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.
Principy překladačů Vysokoúrovňové optimalizace Jakub Yaghob.
Principy překladačů Architektury procesorů Jakub Yaghob.
Lexikální a syntaktická analýza Jakub Yaghob
Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické.
MATLAB® ( Funkce v Matlabu ).
Procedury a funkce Základní charakteristika a použití v programu.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
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í.
Informatika I 2. přednáška
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Algoritmy a programovací techniky
Sémantická analýza Jakub Yaghob
Syntaxí řízený překlad
DEKLARACE PROMĚNNÝCH A KONSTANT
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Počítače a programování 1
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
Konstanty u jsou datové objekty u jejich hodnoty nelze v programu měnit u Deklarace Const jméno = hodnota Příklad: Textový řetězec ZPRAVA Const ZPRAVA.
Generování vnitřní reprezentace programu Miroslav Beneš Dušan Kolář.
Dokumentace informačního systému
Adresy a adresování Střední odborná škola Otrokovice Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Miloš Zatloukal.
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.
Aplikační počítačové prostředky X15APP MATLAB Katedra elektroenergetiky, Fakulta elektrotechniky ČVUT, Technická 2, Praha 6 Ing. Zbyněk Brettschneider.
NEÚPLNÁ PODMÍNKA V JAVĚ. VÝVOJOVÝ DIAGRAM +- Podmínka Příkaz_1.
doc. RNDr. Zdeněk Botek, CSc.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
PŘÍKAZ CYKLU S PODMÍNKOU NA ZAČÁTKU
Příkaz switch Příkaz switch se používá, pokud testujete jednu proměnnou s více možnými hodnotami. Příkaz switch se používá, pokud testujete jednu proměnnou.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
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é.
IB111 Práce se soubory Správa paměti. Práce se soubory v Pythonu Soubor musíme „otevřít“ Poté s ním pracujeme –Čteme a/nebo zapisujeme Nakonec musíme.
XSLT překladač Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Úvod do programování2 Vyučující: Mgr. Vítězslav Jersák Web: xjv.webnode.cz.
Překladače Vnitřní struktura překladače © Milan Keršláger
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
Překladače Operační paměť © Milan Keršláger
Překladače 6. Sémantická analýza
Makra v Excelu syntaxe. Zápis nahraného makra SubEnd Sub O klíčová slova Sub a End Sub – začátek a konec makra O komentáře O text za znakem ', až do konce.
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
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 Syntaktická analýza
Vzorové řešení zápočtového testu
Operační systémy Vnitřní struktura překladače
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.
Překladače 6. Sémantická analýza
MU002 – Informační technologie Základy algoritmizace 5/13
C# přehled vlastností.
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Transkript prezentace:

Generování mezikódu Jakub Yaghob Principy překladačů Generování mezikódu Jakub Yaghob

Co už známe Typy instrukcí tříadresového kódu Implementace Čtveřice Trojice, nepřímé trojice Graf toku řízení Základní blok Životnost jména

Jak generovat mezikód v syntaxí řízeném překladu Přidáme ke každému symbolu gramatiky atributy obsahující informace o mezikódu Umístění (place) – jméno objektu, který obsahuje hodnotu symbolu Kód (code) – posloupnost tříadresových instrukcí, která „vypočítá“ symbol Adresa do kódu (label) – absolutní nebo relativní adresa do tříadresových instrukcí

Příklad pro pověstnou gramatiku E → ER + T E → T T → TR * F T → F F → ( E ) F → id E.p = newtemp E.c = ER.c | T.c | gen(E.p=ER.p + T.p) E.p = T.p E.c = T.c T.p = newtemp T.c = TR.c | F.c | gen(T.p = TR.p * F.p) T.p = F.p T.c = F.c F.p = E.p F.c = E.c F.p = id.p F.c = ‘’

Příklad pro while (amatér) S→ while E do SR S.L1 = curradr S.L2 = curradr + E.c.size + SR.c.size + 2 S.c = E.c | gen(JZ E.p, S.L2) | SR.c | gen(JMP S.L1) S.L1: E.c JZ E.p, S.L2 SR.c JMP S.L1 S.L2:

Příklad pro while (odborník) S→ while E do SR S.L1 = curradr + 1 S.L2 = curradr + SR.c.size + 1 S.c = gen(JMP S.L2) | SR.c | E.c | gen(JNZ E.p, S.L1) JMP S.L2 S.L1: SR.c S.L2: E.c JNZ E.p, S.L1

Deklarace Deklarace globálních objektů Deklarace lokálních objektů Např. globální proměnné v C Deklarace lokálních objektů Např. lokální proměnné v rámci funkce Na začátku funkce x na začátku bloku x v průběhu bloku Přesun deklarací na „dobré“ místo Globální na jednom předdefinovaném místě Lokální na začátek funkce Životnost proměnné v rámci funkce Určení velikosti objektu Určení offsetu ve struktuře pro její položky Nemusí být řešeno v mezikódu

Přiřazení Konverze mezi typy Přístupy k položkám struktury Obvykle explicitní Mezikód nezná sémantiku vstupního jazyka Přístupy k položkám struktury Využití vypočtených posunutí z deklarace Přímý výpočet přes ukazatel a přičtenou konstantu Rozvinutí polí Vícerozměrná pole se chápou jako jednorozměrná (stejně jako paměť) – obvykle rozvinutí řádka za řádkou Pro jednorozměrné pole A[lb..ub] typu o šířce w base + (i-lb) * w i * w + (base – lb * w) Dvojrozměrné pole A[lb1..ub1,lb2..ub2] base + ((i1-lb1) * (ub2-lb2+1) + i2-lb2) * w

Booleovské výrazy Někdy nahrazení FALSE=0, TRUE=1 (nebo cokoliv !=0) Numerický (plný) výpočet Všechny části výrazu vypočteny a vyhodnoceny booleovskou aritmetikou Pascal Zkrácený výpočet Jakmile je z výpočtu jasné, jaký bude výsledek, dále se nepočítá Skoky ve výpočtu C

Příkaz větvení (switch) Co potřebuji Vyhodnotit výraz, podle kterého se větvím Najít větev podle vypočtené hodnoty Provést nalezenou větev nebo defaultní větev/nic Nalezení větve Lineární sekvence podmínek Velmi málo větví Binární vyhledávání v tabulce [hodnota,vetevptr] Binární strom podmínek Tabulka ukazatelů indexovaná hodnotou Velká hustota hodnot ve zkoumaném rozsahu

Backpatching Problém jednoprůchodového překladu: jak nastavit adresy skoků na ještě nepotkané objekty? Popředný skok Volání ještě nedefinované funkce v rámci jednoho modulu Může být řešeno i linkerem Zapamatování si seznamu instrukcí mezikódu k ještě neznámému objektu Až daný objekt potkám, vyhodnotím jeho adresu v mezikódu Projdu seznam instrukcí a provedu opravu mezikódu

Volání procedur/funkcí Vyhodnocení parametrů Předání hodnot nebo referencí V Pascalu „nevařené“ nebo „vařené“ parametry Svázání skutečných parametrů s formálními parametry Pozičně Může záležet na pořadí předávání parametrů Jménem Návratová hodnota