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 |
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.
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.
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.
Naopak, z posloupnosti symbolů se snažíme udělat počáteční symbol.
Vstup: Derivační strom
Výstup: Abstraktní syntaktický strom
Sémantický analyzátor kontroluje sémantické aspekty programu:
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ů:
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í.
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.