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

Podobné dokumenty
1 Úvod do kompilátorů

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

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

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

Překladač a jeho struktura

Program a životní cyklus programu

Úvod do programovacích jazyků (Java)

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

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

Programovací jazyk Pascal

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

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

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

TÉMATICKÝ OKRUH TZD, DIS a TIS

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

Úvod. Programovací paradigmata

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

Struktura programu v době běhu

Matematika v programovacích

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

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

11. Přehled prog. jazyků

Generování vnitřní reprezentace programu

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

Časová a prostorová složitost algoritmů

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

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

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

Objektově orientovaný přístup

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

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

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

IB111 Programování a algoritmizace. Programovací jazyky

Úvod do programování

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

O datových typech a jejich kontrole

Interpret jazyka IFJ2011

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Architektury počítačů a procesorů

Systém adresace paměti

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

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

Implementace LL(1) překladů

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

Počítač jako prostředek řízení. Struktura a organizace počítače

PODPROGRAMY PROCEDURY A FUNKCE

Paměť počítače. alg2 1

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

Vrstvy programového vybavení Klasifikace Systémové prostředky, ostatní SW Pořizování Využití

Profilová část maturitní zkoušky 2017/2018

Poslední aktualizace: 14. října 2011

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

IB111 Úvod do programování skrze Python Přednáška 13

Programovací jazyky Přehled a vývoj

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

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

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

1. D Y N A M I C K É DAT O V É STRUKTUR Y

2. lekce Algoritmus, cyklus Miroslav Jílek

Algoritmizace. 1. Úvod. Algoritmus

NSWI /2011 ZS. Principy cpypočítačůčů aoperačních systémů ARCHITEKTURA

Algoritmizace- úvod. Ing. Tomáš Otáhal

Úvod do programování. Lekce 1

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Martin Hejtmánek hejtmmar

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

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

Algoritmizace. Cíle předmětu

Algoritmizace a programování

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

PŘETĚŽOVÁNÍ OPERÁTORŮ

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

Princip funkce počítače

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

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Architektura počítačů

Stromy, haldy, prioritní fronty

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Ukazka knihy z internetoveho knihkupectvi

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Konečný automat. Jan Kybic.

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Konstruktory překladačů

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

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

C2115 Praktický úvod do superpočítání

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Programy v prostředí operačního systému

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Elementární datové typy

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů.

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

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.

Spojová implementace lineárních datových struktur

Dědění, polymorfismus

Transkript:

Úvod z historie RNDr. Miroslav Benedikovič John Louis von Neumann r. 1946 nová koncepce počítače (společná paměť pro kód programu a zpracovávaná data) vytvořila podmínky pro vznik softvéru na přípravu programů Katedra informatiky v dopravě Dopravní fakulta Jana Pernera Univerzita Pardubice Katedra informatiky Fakulta riadenia a informatiky Žilinská univerzita Kontakt: (421 41) 513 4 187 Grace Murray Hopper r. 1951 vznik myšlenky programu, který umožní přeložit instrukce z vyššího jazyka do strojového kódu. Kompilace / Kompilátor Compile / Compiler bene@fri.uniza.sk 2 Úvod z historie Pojem kompilátoru John Backus Pod jeho vedením byl v r. 1954 až 1957 ve firmě IBM vyvinutý první kompilátor jazyka FORTRAN formula translation Byl to problémově orientovaný jazyk pro řešení matematických úloh Vývoj spotřeboval 18 člověko-let (staff-years) implementace Stavba tohoto kompilátoru nebyla založena na nějakém teoretickém základě. Jeho struktura, komponenty a techniky vznikali ad-hoc Noam Chomsky Výzkum v oblasti struktury přirozených jazyků. Základy vývoje a tvorby moderních jazyků a jejich kompilátorů. První pohled - Černá skříňka Zdrojový program KOMPILÁTOR Chybové zprávy protokoly Cílový program 3 4

Úvodní pojmy Typická organizace kompilátoru Zdrojový (Source) kód (posloupnost znaků) Zdrojový jazyk jazyk, ve kterém sestavíme zdrojový text, ten je vstupem pro kompilátor (Pascal, C, Java,...) Cílový jazyk jazyk, do kterého přeloží kompilátor zdrojový text, procesor ho dokáže interpretovat Hostující jazyk programovací jazyk, ve kterém sestavíme kompilátor Analýza rozeznává nějaký zdrojový jazyk L Syntéza vytváří cílový kód v cílovém jazyku L' Lexikální analyzátor (scanner) Posloupnost tokenů POPREDIE Front end POZADIE Back end Syntaktický analyzátor (parser) Abstraktní syntaktický strom Rozšířený označený syntaktický strom Pomocný kód Optimalizovaný pomocný kód Sémantický analyzátor Generátor pomocného kódu Optimalizátor Cílový (Object) kód (může být assemblerovský nebo strojový kód) Generátor kódu 5 Fázy kompilátoru Scanner lexikální analyzátor Lineární analýza, scanning proud znaků tvořící zdrojový program je čtený zleva doprava, vyhledávané jsou významové posloupnosti znaků tvořící vždy nedělitelný jedno resp. víceznakový symbol - lexému. Každé z lexém je přiřazený token. Této fáze se častěji říká lexikální analýza, anebo scanning Hierarchická analýza, parsing naskenované symboly anebo tokeny jsou sdružované do syntaktických celků podle přesně stanovených gramatických pravidel jazyka. Tuto fázi voláme syntaktickou analýzou Sémantická analýza vykonávají se určité kontroly pro zajištění správného významu příslušných komponentů v celkovém kontextu programu, případně jeho částí Čte postupně jednotlivé znaky ze zdrojového programu Seskupuje znaky do LEXÉM (jsou to posloupnosti znaků, které patří k sobě ; popisují nějakou entitu jazyka) Každá lexéma odpovídá jednomu TOKEN-u (je to prvek jazyka s definovaným významem); scanner vrací následující token (případně další přídavnou informaci) a odesílá ho do parseru Scanner odhaluje lexikální chyby (např. nekorektní znaky) 7 8

Lexéma / Token - jejich vzájemný vztah Scanner čte příslušnou posloupnost znaků tzv. lexému Přiradí lexémě dohodnutý kód token Pro scanner je pořadí lexém nevýznamné!! Příklad v jazyku Pascal Přiřazovací příkaz: Pozice := zaklad posuv * 60 Lexéma : index := tmp 37 10.2 while <= Token COLON ASSIGN INT-LIT REAL-LIT LOOP-WHILE LE Význam dvojtečka identifikátor přiřazení identifikátor celočíselní literál literál reálního čísla cyklus While relace menší anebo rovný Scanner zjistil následující lexémy a tokeny L e x é m y : Pozice := zaklad posun * 60 T o k e n y : (například jednobytové hodnoty) ASSIGN OP-PLUS OP-KRAT INT-LIT 9 10 PARSER - syntaktický analyzátor Syntaktický strom Seskupuje tokeny do gramatických vět - fráz Zkoumá gramatickou strukturu zdrojového programu Hledá syntaktické chyby, například následující věta v Pascalu: pozice := * 5 je lexikálně správná, ale syntakticky je chybná!! Může hledat i některé "statické sémantické" chyby, například nedeklarované proměnné, případně víckrát deklarované proměnné Generuje vnitřní reprezentaci programu vyjadřující ve tvaru abstraktního syntaktického stromu a buduje program ve vnitřním jazyku Datová struktura s následujícími vlastnostmi: vnitřní uzly stromu obsahují OPERÁTORY synové uzlu obsahují OPERANDY příslušné operace počet synů odpovídá počtu operandů operace každá část podstromu je samostatnou "logickou jednotkou X Y if A<0 then Pr1 else A:=B1 X Y A if < Pr1 := 0 A B 1 11 12

Příklad v jazyku Pascal Sémantický analyzátor Přiřazovací příkaz: pozice := zaklad posuv * 60 ASSIGN V uzlech stromu jsou tokeny!! Informace o lexémech jsou v tabulce symbolů OP-PLUS OP-KRAT INT-LIT Jako vstup používá abstraktní strom vytvořený scannerem Zjišťuje kompatibilitu typů jednotlivých hodnot - typová kontrola V případě potřeby doplňuje uzly konverzními funkcemi pro změnu typu hodnoty na kompatibilní typ, například integer na ty Generuje vnitřní reprezentaci programu vyjadřující ve tvaru abstraktního syntaktického stromu 13 14 Rozšířený syntaktický strom Generátor vnitřního kódu Uzly ve stromě jsou doplněny sémantickými informacemi o typu hodnot pozice := zaklad stupen Doplněný je uzel s funkcí intto() pro převod celočíselné hodnoty na reálnou * intto() 60 Překládá data z abstraktního syntaktického stromu do pomocného vnitřního kódu (intermediate code) Je to zjednodušený kód nezávislý na cílovém jazyku, například tříadresový kód podobný assembleru. V mnohých pascalovských kompilátorech je populární tzv. P-kód Je ho možné lehčeji vytvořit, než konkrétní cílový program Výstupem je tzv. vnitřní tvar programu intermediate representation, připravený pro zpracování v závěrečné syntetizační části kompilátoru V této etapě kompilace je možno vykonávat optimalizaci programu 15 16

Popředí / pozadí Optimalizátor PASCAL C FORTRAN BASIC LOGO Bez vnitřní reprezentace: 25 možností procesor 1 procesor 2 procesor 3 procesor 4 procesor 5 PASCAL C FORTRAN BASIC LOGO S vnitřní reprezentací: Vnitřní Vnitřní jazyk jazyk 10 možností procesor 1 procesor 2 procesor 3 procesor 4 procesor 5 Umožňuje vylepšit cílový kód z hlediska paměťového úspora operační paměti časového náhrada pomalých instrukcí rychlejšími, případně vhodný kompromis předcházejících Odstraňuje redundantní anebo nepotřebné příkazy Dvě etapy optimalizace popředí, front end všeobecné metody nezávislé na cílovém jazyku pozadí, back end optimalizace podřízena cílovému prostředí, například strojovému kódu procesoru (vhodné využívání registrů, používání prostředků pro ekonomičtější organizaci dát...) 17 18 Generátor cílového kódu Dekompozice kompilátoru Generuje cílový kód z (optimalizovaného) pomocného kódu. Je úplně závislý na cílovém prostředí, ve kterém má pracovat přeložený program Příklady cílového jazyka podle účelu: Jazyk symbolických adres assemblerovský jazyk Čistý strojový kód množinu instrukcí procesoru bez předpokladu existence operačního systému a knižnic nezávislý na jiném softvéru Rozšířený strojový kód používané jsou rutiny OS a podporné rutiny (V/V operace, alokace paměti, matematické funkce apod.) Virtuální strojový kód složený je úplně z takzvaných virtuálních instrukcí technika tvorby přenositelného počítače Zdrojový program Lexikální analyzátor Syntaktický analyzátor Sémantický analyzátor Generátor vnitřního kódu Optimalizátor kódu Generátor cílového kódu Cílový program Správce hlášení chyb Error Reporting druh chyby a jej alokace způsob pokračování překladu - zastavení překladu - zotavení Správce tabulky symbolů Symbol Table informace o identifikátorech - paměť nutná pro alokaci identifik. - druh identifikátoru - typ odpovídající hodnoty -počet a typ argumentů procedur a funkcí... 19 20