PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ.

Podobné dokumenty
Generování vnitřní reprezentace programu

GENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK)

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

2011 Jan Janoušek BI-PJP. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

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

Překladač a jeho struktura

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Dotazování nad stromem abstraktní syntaxe

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

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

Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Vizuální programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Abstraktní datové typy: zásobník

Program a životní cyklus programu

Datové struktury. alg12 1

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Úvod do programovacích jazyků (Java)

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.

Algoritmizace. Cíle předmětu

Rekurzivní algoritmy

11. Přehled prog. jazyků

Funkce, intuitivní chápání složitosti

Základní datové struktury

GENEROVÁNI KÓDU jazyk Mila

Algoritmizace a programování

Konstruktory překladačů

Interpret jazyka IFJ2011

Strojový kód. Instrukce počítače

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE FORMALISMY PRO SYNTAXÍ ŘÍZENÝ PŘEKLAD: PŘEKLADOVÉ A ATRIBUTOVÉ GRAMATIKY.

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Lexikální analýza Teorie programovacích jazyků

TÉMATICKÝ OKRUH TZD, DIS a TIS

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Struktura a architektura počítačů (BI-SAP) 7

Opakování programování

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Implementace LL(1) překladů

Abstraktní třídy, polymorfní struktury

Jednoznačné a nejednoznačné gramatiky

Pohled do nitra mikroprocesoru Josef Horálek

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

DTP Základy programování Úvod do předmětu

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Matematika v programovacích

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

Úvod do programování - Java. Cvičení č.4

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

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Příkazové skripty Procedurální jazyky Lua a ostatní

Datové struktury 1: Základní datové struktury

Dynamické programování

Semestrální práce z předmětu Teorie programovacích jazyků

Západočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

ISU Cvičení 7. Marta Čudová

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

1. Programování proti rozhraní

BI-EP1 Efektivní programování 1

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Algoritmizace. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

5. Metody návrhu uživatelského rozhraní

Struktura programu v době běhu

TGH05 - aplikace DFS, průchod do šířky

Časová a prostorová složitost algoritmů

TGH05 - aplikace DFS, průchod do šířky

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

5 Rekurze a zásobník. Rekurzivní volání metody

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Lexikální analýza. Rozhraní lexikálního analyzátoru. Miroslav Beneš Dušan Kolář. M. Beneš, D. Kolář: Lexikální analýza 1. Lexikální analýza 2

Lexikální analýza. Miroslav Beneš Dušan Kolář

Programování v C++ 2, 4. cvičení

Vizuální programovací jazyk

NPRG030 Programování I, 2010/11

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

Algoritmizace. 1. Úvod. Algoritmus

1 Nejkratší cesta grafem

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

Úvod do programování v jazyce Java

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Transkript:

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ. 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Dva základní principy překladu programovacích jazyků Přímý překlad do cílového jazyka jako rozšíření syntaktické analýzy. (Direct Code Generation) Celý překlad do cílového jazyka je specifikován atributovou gramatikou, viz. jako příklad adresář mila1 v semestrální práci. Překlad za použití vnitřní reprezentace (tzv. mezikódu). (Intermediate Representations (IR)) Atributová gramatika definuje překlad do mezikódu, viz. jako příklad adresář mila2 v semestrální práci (jako mezikód je zde použit abstraktní syntaktický strom - AST). Mezikód je pak obvykle dále zpracováván v několika fázích: Všelijaké typy optimalizací nad mezikódem, přidělování registrů, generování mezikódů nižší úrovně, generování cílového kódu (pozn. viz. předmět MI-GEN. V předmětu BI-PJP generujeme z AST přímo kód v zapsaný v cílovém jazyku + děláme jednoduché optimalizace na AST, viz adresář mila2).

Přímý překlad do cílového jazyka jako rozšíření syntaktické analýzy. Výhody: Jednoprůchodový deterministický překlad. Konceptuálně jednoduchý model překladu. Nevýhody: Nevýhody spojené s principem vše v jednom: K některým činnostem je obecně potřeba více průchodů. Oddělení specifických činností (přidělování registrů, hw nezávislé a hw závislé optimalizace) je často výhodné (modifikace, jednodušší implementace). Příliš složitá specifikace, jedná-li se o složitější typ překladu.

Překlad za použití vnitřní reprezentace (tzv. mezikódu) Výhody: Oddělení jednotlivých činností, oddělení high-level operací od low-level operací. (Např. oddělení generování kódu a přidělování registrů od sémantické analýzy vstupního jazyka.) Možnost mít mezikódy různých úrovní (nezávislé na vstupním a výstupním jazyku, závislé na výstupním jazyku, ). Jednodušší a unifikované hw nezávislé optimalizace na mezikódu nezávislém na vstupním a výstupním jazyku. Transportabilita mezikódu (stačí kolikrát napsat nový frontend nebo backend pro nový překladač). Nevýhody: Více průchodů, a z tohoto pohledu také obecně složitější.

Překlad do AST

Překlad do AST viz také dokument semestrálky mila2, Výsledný AST je typicky uložený v jednom syntetizovaním atributu.

DAG Místo AST se používá také DAG (Directed acyclic Graph). Stejné podstromy jsou spojeny do jednoho. Výhody DAGu oproti AST: Paměťová optimalizace uložení vnitřní formy. Výhodný pro optimalizace eliminace společných podvýrazů. Nevýhody: Složitější manipulace a generování.

DAG - příklad příkaz a = b*-c+b*-c AST: DAG: assign a + assign a + * * * b uminus b uminus b uminus c c c

Přímý překlad

Přímý překlad viz také dokument semestrálky mila1, Výsledný kód je typicky uložený v jednom syntetizovaném atributu (viz další slajdy), nebo je překlad realizován jako atributovaný formální překlad (přes výstupní (akční) symboly a jejich dědičné atributy) (viz dokument mila1).

Příklad překladu výrazu E E R + T E T T T R * F T F F ( E ) F id E.p = newtemp E.c = concat(e R.c, T.c, gen(e.p=e R.p + T.p)) E.p = T.p E.c = T.c T.p = newtemp T.c = concat(t R.c, F.c, gen(t.p = T R.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 překladu cyklu tupu while S while E do S R S.L1: E.c JZ E.p, S.L2 S R.c S.L1 = curradr S.L2 = curradr + E.c.size + S R.c.size + 2 S.c = concat(e.c, gen(jz E.p, S.L2), S R.c, gen(jmp S.L1)) S.L2: JMP S.L1

while příklad ješte jednou (lépe) S while E do S R JMP S.L2 S.L1: S R.c S.L2: E.c S.L1 = curradr + 1 S.L2 = curradr + S R.c.size + 1 S.c = concat(gen(jmp S.L2), S R.c, E.c, gen(jnz E.p, S.L1)) JNZ E.p, S.L1

Překlad do jazyka zásobníkového počítače Pozn. jazyk zásobníkového počítače je použit v semestrální práci.

Jazyk zásobníkového počítače int gcd(int a,int b) { while (a!= b) { if (a > b) a = b; else b = a; } return a; } # javap -c Gcd Method int gcd(int, int) 0 goto 19 3 iload_1 // Push a 4 iload_2 // Push b 5 if_icmple 15 // if a <= b goto 15 8 iload_1 // Push a 9 iload_2 // Push b 10 isub // a - b 11 istore_1 // Store new a 12 goto 19 15 iload_2 // Push b 16 iload_1 // Push a 17 isub // b - a 18 istore_2 // Store new b 19 iload_1 // Push a 20 iload_2 // Push b 21 if_icmpne 3 // if a!= b goto 3 24 iload_1 // Push a 25 ireturn // Return a

Výhody Jednoduchý překlad výrazů. Jednoduchý interpret. Neexistuje problém s velmi malým počtem registrů (používá se zásobník místo registrů). Kompaktní kód.

Nevýhody Sémantický mezi zásobníkovými operacemi a moderními procesory s registry (vrchol zásobníku je často držen v registrech). Nesrozumitelný kód z pohledu analýzy co komunikuje s čím. Obtížný tvar pro optimalizace.

stack based IRs Recently again popular and frequently used: Java bytecode interpreted and/or compiled by Java Virtual Machine Common Intermediate Language (CIL), formerly called Microsoft Intermediate Language (MSIL) interpreted and/or compiled by.net runtime or MONO runtime