Úvod Flashcards
Čo je to kompilátor? (jednoducho)
Kompiluje program zo zdrojového jazyka do cieľového a generuje errory.
Čo je to kompilátor? (formálne)
Zobrazenie z jazyka vstupov do jazyka vystupov
Aké poznáme netypické kompilátory?
Dekompilátory (nižšie -> vyššie)
Prekladače jazykov (na rovnakej úrovni)
Kríźové kompilátory (machine code iný ako na akej beží)
Postupné kompilátory (pre abstraktný stroj, Java)
Just in time kompilátory (tesne pred vykonaním kódu)
Čo poznáme okrem kompilátorov?
Interpretery
Okrem kompilovania, na čo ešte vieme využiť kompilátory?
Lint, LaTex -> pdf, SQL, pretty printery
Opíš kroky spracovania programu
Opíš fázy kompilácie (aj rozdelenie)
Aký je rozdiel medzi frontendom a backendom?
FE - fázy závislé na zdrojovom jazyku
BE - fázy závislé na ciel’ovom jazyku (procesore)
Čo je medzi FE a BE?
medzikód - prechodná reprezentácia zdrojového programu
Aké sú výhody rozdelenia na BE a FE?
Rôzne back-endy pre rovnaký vstupný jazyk
Rôzne front-endy pre rovnaký výstupný jazyk
Strojovo nezávislá optimalizácia medzikódu - HLO
Čo je lexikálna analýza?
Znaky zdrojového programu sú načítané a zoskupené do tokenov
Čo sú tokeny? Ako ich rozpoznávame?
ret’azce so spoločným významom, tvoria výstup lexikálnej analýzy
regulárnymi výrazmi
Čo je to lexéma?
Konkrétny výskyt tokenu
napr. x = 3, tak x je lexéma pre token id, 3 je lexéma pre digit a pod.
Čo je to syntaktická analýza?
Generovanie stromu odvodenia - bezkontextové jazyky, resp. syntaktického stromu
Aké poznáme algoritmy na zistenie príslušnosti slova do bezk. jazyka?
Algoritmus CYK v n^3
Top-down a bottom-up v O(n), ale len pre niektoré (LL(1)) a pod