Překladač a jeho struktura



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

TÉMATICKÝ OKRUH TZD, DIS a TIS

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

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

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

Poslední aktualizace: 14. října 2011

Úvod. Programovací paradigmata

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

Program a životní cyklus programu

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

Úvod do programovacích jazyků (Java)

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

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

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

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

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

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

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

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

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

Implementace LL(1) překladů

Hospodářská informatika

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

Úvod do programování

SEKVENČNÍ LOGICKÉ OBVODY

Konstruktory překladačů

11. Přehled prog. jazyků

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

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

Algoritmizace. 1. Úvod. Algoritmus

Algoritmizace a programování

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

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

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

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

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

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

Vzorce. StatSoft. Vzorce. Kde všude se dá zadat vzorec

Matematika v programovacích

Programovací jazyk Pascal

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

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

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

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

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

Vlastnosti Derivační strom Metody Metoda shora dolů Metoda zdola nahoru Pomocné množiny. Syntaktická analýza. Metody a nástroje syntaktické analýzy

Úvod do informatiky. Miroslav Kolařík

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

VISUAL BASIC. Přehled témat

Konečný automat. Jan Kybic.

IB111 Programování a algoritmizace. Programovací jazyky

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

Algoritmizace prostorových úloh

Syntaxí řízený překlad

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Příprava dat v softwaru Statistica

Vstupní požadavky, doporučení a metodické pokyny

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

6 Příkazy řízení toku

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

Implementace překladače imperativního jazyka IFJ05

Algoritmy a datové struktury

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

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

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

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Systém přirozené dedukce výrokové logiky

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Profilová část maturitní zkoušky 2013/2014

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

Sada 1 - Základy programování

Naproti tomu gramatika je vlastně soupis pravidel, jak

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

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

DIGITÁLNÍ MAPY. Přednáška z předmětu KMA/TKA. Otakar ČERBA Západočeská univerzita v Plzni

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

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

Algoritmizace. Cíle předmětu

PHP tutoriál (základy PHP snadno a rychle)

Z. Kotala, P. Toman: Java ( Obsah )

ALGORITMIZACE A 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

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

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

První kroky s METEL IEC IDE

Výukový materiál zpracován v rámci projektu EU peníze školám

Komprimace/Dekomprimace

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

Schopnosti překladačů programovacího jazyka Python

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

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

Rozklad na prvočinitele. 3. prosince 2010

Skripty - úvod. Linux - skripty 2

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

Transkript:

Překladač a jeho struktura Překladače, přednáška č. 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 23. září 2008

Definice překladače Definice (Překladač) Překladač je program, který k libovolnému programu P Z (zdrojový program) v jazyku J Z (zdrojový jazyk) vytvoří program P C (cílový program) v jazyku J C (cílový jazyk) se stejným významem. Překladač tedy realizuje zobrazení z jazyka J Z do jazyka J C. P z P c nad nad J z J c

Definice překladače Definice (Překladač) Překladač je program, který k libovolnému programu P Z (zdrojový program) v jazyku J Z (zdrojový jazyk) vytvoří program P C (cílový program) v jazyku J C (cílový jazyk) se stejným významem. Překladač tedy realizuje zobrazení z jazyka J Z do jazyka J C. P z P c nad nad J z J c

Typy překladačů z hlediska existence cílového kódu kompilátor (generační překladač) interpret (interpretační překladač) hybridní

Typy překladačů z hlediska existence cílového kódu zdrojový program kompilátor data cílový program operační systém zdrojový program data interpret výsledky výsledky

Typy překladačů z hlediska existence cílového kódu Vlastnost Kompilátor Interpret Rychlost běhu cílového programu lepší Rychlost spuštění cílového programu lepší Rychlost překladu lepší Spotřeba paměti operační (při běhu) lepší Spotřeba paměti cílový soubor na pam. médiu lepší Přenositelnost kódu mezi SW platformami lepší Možnosti optimalizace lepší Nezávislost na překladači lepší

Typy překladačů z hlediska komunikace s uživatelem klasický konverzační rozlišujeme jazyk a metajazyk, dvě části: řidicí část interpretační (kompilační) část

Fáze překladu 1 lexikální analýza, 2 syntaktická analýza, 3 sémantická analýza, 4 optimalizace kódu, 5 generování cílového kódu nebo interpretace, 6 hlášení o chybách, 7 informace o překladu.

Fáze překladu 1 lexikální analýza, 2 syntaktická analýza, 3 sémantická analýza, 4 optimalizace kódu, 5 generování cílového kódu nebo interpretace, 6 hlášení o chybách, 7 informace o překladu.

Fáze překladu Přední část překladače: 1 lexikální analýza, 2 syntaktická analýza, 3 sémantická analýza, Zadní část překladače: 1 optimalizace kódu, 2 generování cílového kódu nebo interpretace.

Průchody překladu Definice (Průchod) Průchodem nazýváme krok činnosti překladače, ve kterém je zpracován celý vstupní soubor kroku na výstupní soubor kroku (vstupní soubor kroku nemusí být totožný se vstupním souborem překladače, stejně tak výstupní soubor ještě nemusí být cílový kód). Pojmy mezikód, interní kód, interní forma programu, intermediální kód, jednoprůchodový překladač, víceprůchodový překladač.

Průchody překladu Definice (Průchod) Průchodem nazýváme krok činnosti překladače, ve kterém je zpracován celý vstupní soubor kroku na výstupní soubor kroku (vstupní soubor kroku nemusí být totožný se vstupním souborem překladače, stejně tak výstupní soubor ještě nemusí být cílový kód). Pojmy mezikód, interní kód, interní forma programu, intermediální kód, jednoprůchodový překladač, víceprůchodový překladač.

Informace o chybě Překladač přijde na chybu ve zdroji: podá uživateli tyto informace: kde v programu se chyba nachází (např. číslo řádku a pozice na něm), typ chyby (např. proměnná tohoto názvu nebyla deklarována, chyba v syntaxi operátoru,... ), některé překladače dokážou navrhnout možnosti nápravy chyby. Překladač by se rozhodně neměl pokoušet chyby sám opravovat bez okamžitého informování uživatele.

Lexikální analyzátor Chyby typu neznámý symbol, například 12YT. Není problém zjistit umístění ve zdroji.

Syntaktický analyzátor Chyby v syntaktické struktuře programu, přehozená a chybějící klíčová slova nebo symboly, například 12 := x; IF x>1 ELSE x := 3; Pokud je ve stejném průchodu s lexikálním, snadno zjistíme umístění ve zdroji. Když ne, zvolíme jeden z těchto způsobů: 1 Součástí symbolu nebude jen jeho identifikace a sémantické atributy, ale také další dva atributy určující číslo řádku, na kterém se symbol nachází, a vzdálenost prvního znaku symbolu od začátku řádku. 2 Nadefinujeme speciální typ symbolu, který bude představovat přechod na nový řádek ve zdroji. Tento symbol přidá lexikální analyzátor k výstupu kdykoliv, když narazí na konec řádku ve zdroji (samozřejmě také uvnitř komentářů!). Syntaktický analyzátor má vyhrazený čítač, který zvýší o 1, když ve svém vstupu načte symbol konce řádku, takže má přehled o tom, na kterém řádku zdroje se nachází.

Sémantický analyzátor Chyby zjistitelné při překladu nedeklarovaná proměnná použitá ve výrazu, nekompatibilní datový typ, apod. Informace o umístění se zjišťují stejně jako u syntaktické analýzy. Běhové chyby dělení nulou, přetečení datového typu, nedovolený přístup do paměti, atd. Informaci o umístění ve zdroji obvykle nelze získat, u kompilačního překladače se vypisuje alespoň pozice v cílovém kódu.

Typologie chyb Chyby na straně uživatele 1 Chyby související se strukturou programu (většinou lexikální nebo syntaktické), ty lze obvykle zjistit už při překladu. 2 Chyby běhové (run-time), například dělení nulou. Souvisí obvykle s momentální hodnotou proměnných a lze je jen těžko zjistit. 3 Chyby logické (chybná posloupnost příkazů, záměna operátorů, překlep v čísle apod.), které při překladu prakticky nelze odhalit.

Reakce na chybu Překladač reaguje dvěma způsoby: při prvním výskytu chyby se zastaví, provede diagnózu, informuje uživatele a čeká na opravu chyby (Turbo Pascal), pokouší se najít co nejvíce chyb najednou, zastaví se až při určitém maximálním počtu a informuje uživatele o všech objevených chybách popř. o maximálním počtu chyb, které je schopen zobrazit (například C++). Zotavení po chybě Umožňuje opravit více chyb najednou bez nutnosti pokaždé znovu spouštět překladač. Analyzátor načítá prvky ze vstupu naprázdno bez další reakce tak dlouho, dokud se nepodaří navázat na předchozí správný průběh překladu, pak pokračuje běžným způsobem.

Reakce na chybu Překladač reaguje dvěma způsoby: při prvním výskytu chyby se zastaví, provede diagnózu, informuje uživatele a čeká na opravu chyby (Turbo Pascal), pokouší se najít co nejvíce chyb najednou, zastaví se až při určitém maximálním počtu a informuje uživatele o všech objevených chybách popř. o maximálním počtu chyb, které je schopen zobrazit (například C++). Zotavení po chybě Umožňuje opravit více chyb najednou bez nutnosti pokaždé znovu spouštět překladač. Analyzátor načítá prvky ze vstupu naprázdno bez další reakce tak dlouho, dokud se nepodaří navázat na předchozí správný průběh překladu, pak pokračuje běžným způsobem.

Jazyky překladače jazyk, ve kterém je sám napsán, zdrojový jazyk, který přijímá, cílový jazyk, ve kterém je jeho výstup.

Generátory překladačů Jak vytvořit překladač v assembleru ve vyšším programovacím jazyce s použitím generátoru překladačů dodáme popis struktury jazyka (gramatika) a popis výstupu generátory lexikálního analyzátoru Lex, Flex generátory syntaktického analyzátoru Yacc, Bison

Aplikace pro jinou platformu Programování aplikací Kompilátor překládá aplikaci do cílového jazyka pro jiný operační systém než na kterém provádí překlad. Používá se u aplikací pro mobily, PDA, roboty, herní konzole. Portování = přenos již existující aplikace nebo operačního systému na novou platformu (softwarovou nebo hardwarovou).