Obsah

Struktura překladače a charakteristika fází překladu

Compiler

Překladač čtě zdrojový program (napsaný ve zdrojovém jazyce) a překládá ho na cílový program (napsaný v cílovém jazyce – zpravidla nějaký asembler). Zdrojový a cílový program jsou vzájemně funkčně ekvivalentní.

Lexikální anaýza Syntaktická analýza Sémantická analýza Generování vnitřního kódu Optimalizátor Generování cílového kódu
Zdrojový kód Řetězec tokenů Derivařní strom Abstraktní syntaktický strom Vnitřní kód (optimalizovaný) Cílový program

1)

Lexikální analýza

Lexical analysis

Vstup: Zdrojový program

Výstup: Řetězec tokenů

V podstatě jde o to rozsekat tok znaků na jednotlivé tokeny (slova) a přiřadit jim význam (2 je číslo, x je proměnná, + je operátor, …). Často se k tomu používají regulární výrazy.

Syntaktická analýza

Parsing

Vstup: Řetězec tokenů

Výstup: Derivační strom

Cílem je zkontrolovat, že jednotlivé tokeny jdou správně za sebou a dávají tak smysl. Výsledkem je tzv. syntaktický (derivační) strom. Pokud takový strom nalezneme, program je správný, jinak ne. Vytváření derivačního stromu je založeno na bezkontextových gramatikách a zásobníkových automatech.

Shora dolů

Top-down parsing

Probíhá tak, že se symboly v gramatice postupně rozgenerovávají, takže z počátečního symbolu vznikne posloupnost jiných symbolů podle gramatiky. Používá se častěji.

Zdola nahoru

Bottom-up parsing

Naopak, z posloupnosti symbolů se snažíme udělat počáteční symbol.

Sémantická analýza

Vstup: Derivační strom

Výstup: Abstraktní syntaktický strom

Sémantický analyzátor kontroluje sémantické aspekty programu:

Generování vnitřního kódu

Vstup: Abstraktní syntaktický strom

Výstup: Vnitřní kód

Generátor vnitřního kódu vytváří vnitřní reprezentaci programu nazývanou vnitřní kód (většinou tří adresný) z následujících důvodů:

Optimalizátor

Vstup: Vnitřní kód

Výstup: Optimalizovaný vnitřní kód

Optimalizátor upraví vnitřní kód tak, aby byl efektivnější. Příklady úprav:

Některé překladače optimalizátor nemají.

Generování cílového kódu

Code generation (compiler), Three address code

Vstup: Optimalizovaný vnitřní kód (popř. neoptimalizovaný)

Výstup: Cílový program

Cílový program je zapsán v cílovém jazyce. V praxi je cílovým jazykem většinou asembler nebo strojový kód.

Shrnutí

1)
Některé browsery tu tabulku vykreslují divně