Co je to překladač?
Typy překladačů
Hlavní části překladače
Překladač a jeho struktura Překladače, přednáška č. 1
Šárka Vavrečková Ústav informatiky, FPF SU Opava
[email protected] http://fpf.slu.cz/~vav10ui
Poslední aktualizace: 23. září 2008
Zpracování chyb
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
Definice překladače Definice (Překladač) Překladač je program, který k libovolnému programu PZ (zdrojový program) v jazyku JZ (zdrojový jazyk) vytvoří program PC (cílový program) v jazyku JC (cílový jazyk) se stejným významem. Překladač tedy realizuje zobrazení z jazyka JZ do jazyka JC . Pz
−→
nad Jz
Pc nad
−→
Jc
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
Definice překladače Definice (Překladač) Překladač je program, který k libovolnému programu PZ (zdrojový program) v jazyku JZ (zdrojový jazyk) vytvoří program PC (cílový program) v jazyku JC (cílový jazyk) se stejným významem. Překladač tedy realizuje zobrazení z jazyka JZ do jazyka JC . Pz
−→
nad Jz
Pc nad
−→
Jc
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
Typy překladačů z hlediska existence cílového kódu kompilátor (generační překladač) interpret (interpretační překladač) hybridní
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
Okolí
Typy překladačů z hlediska existence cílového kódu
zdrojový program ?
kompilátor
zdrojový program
data cílový
program-
?
operační systém
výsledky
data
? ?
interpret
výsledky ?
?
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
Okolí
Typy překladačů z hlediska existence cílového kódu Vlastnost Rychlost běhu cílového programu Rychlost spuštění cílového programu Rychlost překladu Spotřeba paměti – operační (při běhu) Spotřeba paměti – cílový soubor na pam. médiu Přenositelnost kódu mezi SW platformami Možnosti optimalizace Nezávislost na překladači
Kompilátor lepší lepší
Interpret
lepší lepší lepší lepší lepší lepší
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
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.
Zpracování chyb
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
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.
Zpracování chyb
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Fáze překladu Přední část překladače: 1 2 3
lexikální analýza, syntaktická analýza, sémantická analýza,
Zadní část překladače: 1 2
optimalizace kódu, generování cílového kódu nebo interpretace.
Zpracování chyb
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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č.
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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č.
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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.
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
Lexikální analyzátor Chyby typu „neznámý symbolÿ, například 12YT. Není problém zjistit umístění ve zdroji.
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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
2
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. 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í.
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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.
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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.
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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.
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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.
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
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.
Zpracování chyb
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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
Okolí
Co je to překladač?
Typy překladačů
Hlavní části překladače
Zpracování chyb
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).
Okolí