Ú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
Čo dať do LA a čo do SA?
LA: konštrukcie definované bez rekurzie (identifikátory,..)
SA: konštrukcie definované pomocou rekurzie (príkazy, výrazy,..)
Opíš Syntaxou riadený preklad
Prepojuje syntaktickú analýzu s d’alšími fázami kompilácie
K pravidlám gramatiky sú priradené sémantické akcie (napr. generovanie medzikódu)
Čo je syntéza v sémantickej analýze?
Zozbieranie infomácií o typoch pre ďalšiu analýzu
Čo je tabuľka symbolov?
Dátova štruktúra, kde sa počas analýzy ukladajú informácie o identifikátoroch
Čo obsahuje tabuľka symbolov?
záznam pre každý identifikátor s pol’ami pre jeho atribúty
* Alokovaná pamät’
* Typ
* Rozsah platnosti
* Pri menách procedúr aj počet a typ parametrov, spôsob
predávania parametrov, typ návratovej hodnoty
Aké chyby môžu nastať v lexikálnej, syntaktickej a sémantickej analýze?
- Lex. analýza: nespracované znaky na vstupe netvoria
žiadny token - Synt. analýza: postupnost’ tokenov nespĺňa štrukturálne
pravidlá - Sém. analýza: syntaktická konštrukcia nemá význam
vzhl’adom na danú operáciu
Ako je zvyčajne reprezentovaný medzikód?
ako trojadresový kód
* x := y op z
* Implementovaný ako záznam so štyrmi položkami: op, arg1, arg2, res
Čo vieme robiť s medzikódom ešte?
Optimalizovať rýchlosť, veľkosť výsledného kódu a pod.
Ako prebieha generovanie kódu?
- Priradenie miest v pamäti pre jednotlivé premenné
- Preklad inštrukcií medzikódu do postupností inštrukcií ciel’ového jazyka (assembler, machine code,. …)
Načo je ANTLR?
Generuje parser, pre syntaktickú analýzu, pomocou bezkontextovej gramatiky. Môže obsahovať aj lexer.