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

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

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

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

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

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

Interpret jazyka IFJ2011

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

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

Konstrukce překladačů

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

Generování vnitřní reprezentace programu

Programovací jazyk Pascal

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Poslední aktualizace: 14. října 2011

GENEROVÁNI KÓDU jazyk Mila

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Optimalizace pomocí icc/gcc - vektorizace

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

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

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.

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Jednoznačné a nejednoznačné gramatiky

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Implementace LL(1) překladů

Překladač a jeho struktura

Dotazování nad stromem abstraktní syntaxe

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Konstruktory překladačů

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

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

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

Analýza toku dat. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 15. listopad, 2012

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

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

Uplatnění metod na zvolený jazyk

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

14. Složitější konstrukce

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

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

Struktura programu v době běhu

dovolují dělení velkých úloh na menší = dekompozice

Časová a prostorová složitost algoritmů

7. Popis konečného automatu

Errata. Seznam chyb v textu bakalářské práce. Překladač s optimalizací výsledného kódu, 2013, Petr Krajník. Stav objevených chyb z 9.

Souhrn Apendixu A doporučení VHDL

Programování. Psaní čistého kódu. Martin Urza

Architektury VLIW M. Skrbek a I. Šimeček

NPRG030 Programování I, 2015/16 1 / :25:32

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

VISUAL BASIC. Přehled témat

Úvod do programování

Lexikální analýza (Obsah)

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

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

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

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

1 Úvod do kompilátorů

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

ALGORITMIZACE A PROGRAMOVÁNÍ

Rekurzivní algoritmy

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

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

Dynamické programování

Kurz LSL skriptování. Shiny Iceberg 2009

Semestrální práce implementuje univerzální tokenizer založený na stavovém automatu. Jsou implementovány následující automaty:

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

Další možnosti inicializace proměnných

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Implementace překladače imperativního jazyka IFJ05

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

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Sada 1 - Základy programování

x86 assembler and inline assembler in GCC

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Úvod do programovacích jazyků (Java)

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

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

Paradigmata programování 1

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

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála.

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

Funkce, podmíněný příkaz if-else, příkaz cyklu for

PRG036 Technologie XML

8. Zpracování dotazu. J. Zendulka: Databázové systémy 8 Zpracování dotazu 1

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Knihovna WebGraphLib

Maturitní otázky z předmětu PROGRAMOVÁNÍ

1.Charakterizujte křížový překladač 2.Objasněte pojem silikonový překladač 3.Co to jsou formátory textu? Uveďte příklad

Konečný automat. Jan Kybic.

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

3. Aritmetika nad F p a F 2

První kapitola úvod do problematiky

LabView jako programovací jazyk II

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

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Transkript:

GENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK) 2011 Jan Janoušek MI-GEN Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Úvod Tato přednáška si klade za cíl reagovat na diskuzi se studenty po minulé přednášce - některým ze studentů chybí předchozí kurz překladačů, viz. předmět BI-PJP. Proto u těchto studentů nastává zjevně obtížnější celková orientace v problému. Na konkrétním příkladu chci probrat postupně jednotlivé kroky překladu, včetně frontendu, a tyto kroky diskutovat na tabuli. Jako vstupní jazyk bude uvažován jazyk Mila, výstupním jazykem bude jazyk Tiny machine (oba jazyky viz. semestrální práce). Přednáška tak může sloužit také jako pomoc k semestrálce.

const a=20, b=2, c=2; var x,y,z,v; begin read v; x:=v+a*b+5; y:=v+a*b+100; z:=0; If (z=0) then z=1; If (v<x) then x=x+1 else x=x*2; while (x < y) do begin z= y+5; v=v+z; x=c-1+x; end; end.

1. fáze lexikální analýza Vstup: program Výstup: posloupnost lexikálních elementů. Tyto lexikální elementy jsou terminální symboly bezkontextové gramatiky a můžou mít své syntetizované atributy. specifikace lexikálních elementů regulární gramatikou, viz. dokumentace Mily implementace konečným automatem, viz. soubor lexan.cpp Výstupní posloupnost: const ident (.sid= a ) = cislo (.shod=20), atd

2. fáze syntaktická + sémantická analýza Vstup: posloupnost lexikálních elementů + jejich syntetizované atributy. Výstup: Zvolený vnitřní kód (záleží pouze na nás), tj. buď AST, nebo DAG, nebo 3 adresový kód (kódy lze později převádět jeden na druhý). Konstanty už jsou nahrazeny svými skutečnými hodnotami. Překlad je specifikovaný atributovou gramatikou, viz. implementace mila (překlad do AST), nebo předchozí přednášky atributových gramatik a převodů pro DAG a/nebo 3-AC. Dále je v této fázi vytvořena tabulka symbolů, v mile viz. tabsym.cpp. Ta uchovává všechny údaje o konstantách, proměnných, návěštích, atd se kterými bude pracovata budeme je nějak potřebovat.

2. fáze syntaktická + sémantická analýza Implementace: některou z metod syntaxí řízeného překladu. Základem algoritmu je deterministická syntaktická analýza. V našem případě je vstupní gramatika LL(1), takže je zvolena LL(1) analýza a její implementace rekurzivním sestupem, viz. soubor parser.cpp. Tabulka symbolů by měla mít po 2. fázi následující položky: jako konstanty a,b,c jako proměnné x,y,z,v pokud generujeme 3-AC, pak také všechny dočasné proměnné

3. fáze lokální optimalizace Pozn. Lokální optimalizace lze provádět případně i v průběhu druhé fáze. Musíme pak ale tyto optimalizace definovat atributovými pravidly. Constant folding + eliminace mrtvého kódu viz. existující implementace mily, viz. soubor strom.cpp a metoda optimize(). Propagace konstant Detekce společných podvýrazů (konstrukce DAGu) Detekce invariantních výrazů v cyklech Výhodnějsí instrukce - machine-idioms další optimalizace (např. optimalizace skoků), viz. předchozí přednáška

3. fáze další optimalizace Tabulku symbolů stále používáme k uchovávání všech potřebných hodnot. U 3-AC je potřeba si určit základní bloky, graf toku řízení a stavy dočasných proměnných (live, dead, unused). Pipelining a globální optimalizace budou probrány na následujících přednáškách. Alokace registrů u 3AC kódu, např. barvením grafu.

4. fáze generování kódu U AST a DAGu výběr instrukcí pokrýváním stromu, popř. přímým generováním. U 3-AC přímé generování. Následuje případně opět alokace registrů. Případně optimalizace založené na použití konkrétního hw.

A detailed order of optimizations (from the book Muchnick: Advanced Compiler Design and Implementation) Scalar replacement of array references Data-cache optimizations Constant folding Algebraic simplification and reassociation 10 Procedure integration Tail-call optimization Scalar replacement of aggregates Sparse conditional constant propagation Interprocedural constant propagation Procedure specialization and cloning Sparse conditional constant propagation Global value numbering Local and global copy propagation Sparse conditional constant propagation Dead-code elimination Local and global common-subexpression elimination Loop-invariant code motion Dead-code elimination Code hoisting Induction-variable strength reduction Linear-function test replacement Induction-variable removal Unnecessary bounds-checking elimination Control-flow optimizations In-line expansion Leaf-routine optimization Shrink wrapping Machine idioms Tail merging Branch optimizations and conditional moves Dead-code elimination Software pipelining, loop unrolling Basic-block and branch scheduling Register allocation Basic-block and branch scheduling Intraprocedural I-cache optimization Instruction prefetching Data prefetching Branch prediction Interprocedural register allocation Aggregation of global references Interprocedural I-cache optimization