Introductory compiler course concentrates primarily on theoretical and practical principles of fore-end compiler construction. Exercises emphasise elementary using of tools for compiler construction. A student will be capable to construct his/her own compiler into an intermediate code or an another language after finishing this course.
Last update: T_KSI (24.05.2005)
Úvodní kurz překladačů se soustřeďuje zejména na teoretické i praktické základy konstrukce přední části
překladače. Součástí předmětu je i cvičení zaměřující se na základy práce s nástroji pro konstrukci překladačů. Po
absolvování tohoto kurzu bude posluchač schopen sestrojit vlastní překladač do mezikódu nebo jiného jazyka.
Pro absolvování předmětu je nezbytná detailní znalost látky pokryté předmětem TIN071 Automaty a gramatiky.
Last update: Zavoral Filip, RNDr., Ph.D. (24.04.2024)
Course completion requirements -
There will be 5 home assignments which are designed to incrementally build a compiler for simplified C language (called Cecko).
You may receive up to 100 points for assignments #1 and #2 and up to 150 points for assignments #3-#5. The sum of your points will determine your final mark as follows:
600 or more - 1 (excellent)
450-599 - 2 (well done)
350-449 - 3 (OK)
349 or less - failed
Furthermore, 350 points are required to receive a credit for the seminar (which is also required). If you are not satisfied with your mark, but you have at least 350 points (and thus the credit), you may request a written examination where your mark will be determined. Once subscribing for the exam, your mark received from the assignments is no longer valid — i.e., you may fail the exam even if you have enough points from the assignments.
Each assignment has a strict deadline. Once the deadline is reached, all assignments are collected and graded. You may submit your solution after the deadline and ask for (re)evaluation, but you will receive penalty 10 points per day for late submission, which is additionally subtracted from points obtained for the assignment.
Last update: Yaghob Jakub, RNDr., Ph.D. (26.07.2022)
V 5 domácích úkolech budete postupně vytvářet překladač pro zjednodušený jazyk C (nazvaný Céčko).
Úkoly #1 a #2 budou hodnoceny maximálně 100 body, úkoly #3- #5 budou hodnoceny maximálně 150 body. Součet vašich bodů určí vaši konečnou známku i zápočet takto:
600 nebo více - 1 (výborně)
450-599 - 2 (velmi dobře)
350-449 - 3 (dobře)
349 nebo méně - neprospěl
Kromě toho je zapotřebí 350 bodů k získání zápočtu. Pokud nejste s Vaší známkou spokojeni, ale máte alespoň 350 bodů (tedy zápočet), můžete požádat o písemnou zkoušku. Pokud se však tak rozhodnete, Vaše známka z domácích úkolů již není platná, tj. může se stát, že u zkoušky neprospějete, i když máte dostatek bodů z domácích úkolů.
Každá domácí úloha má termín. V termínu jsou všechna řešení shromážděna, otestována a ohodnocena. Vaše řešení můžete předložit i po uplynutí termínu, ale každý den zpoždění proti termínu je penalizován 10 body, které se odečtou od získaných bodů při ohodnocení odevzdaného řešení.
Last update: Yaghob Jakub, RNDr., Ph.D. (26.07.2022)
Grune, Bal, Jacobs, Langendoen: Modern Compiler Design, Wiley 2000
Last update: T_KSI (24.05.2005)
Syllabus -
Typical compiler structure for procedural languages
Intermediate codes; internal representation of a compiled program
Lexical and syntax analyses; top-down analysis: LL(k) grammars, implementation by recursive-descent; bottom-up analysis: LR(1) grammars and parsers, modified construction SLR{1), LALR(1); Flex, Bison
Semantic analysis; link with syntax analysis; attributes; basic tasks of semantic analysis for procedural languages
Intermediate code generation
High-level optimizations, e.g. constant folding, common subexpression elimination, algebraic transformations; basic block, control flow, data flow, live-range analysis, other analysis techniques
Modern processor architectures and their impact on compilers; fundamental units of code generator
Interpreted languages
Runtime support; memory organization for procedural languages
Last update: Yaghob Jakub, RNDr., Ph.D. (22.04.2016)
Typická struktura překladače procedurálního jazyka
Mezikódy; vnitřní reprezentace překládaného programu
Lexikální a syntaktická analýza; analýza shora dolu: LL(k) gramatiky, implementace rekurzivním sestupem; analýza zdola nahoru: LR(1) gramatiky a analyzátory, upravené konstrukce SLR(1), LALR(1); Flex, Bison
Sémantická analýza; vazba na syntaktickou analýzu; atributy; základní úkoly sémantické analýzy procedurálních jazyků
Generování mezikódu
Vysokoúrovňové optimalizace, např. vyhodnocování konstantních podvýrazů, eliminace společných podvýrazů, algebraické úpravy; základní blok, control flow, data flow, analýza doby životnosti, další techniky analýzy
Moderní architektury procesorů a jejich efekt na překladače; základní bloky generátoru kódu
Interpretované jazyky
Běhová podpora; organizace paměti procedurálních jazyků
Last update: Yaghob Jakub, RNDr., Ph.D. (22.04.2016)
Entry requirements -
Important parts of the course are home assignments in C++. Required language features are covered by the course NPRG041. It is possible to visit the course NSWI098 simultaneously with the course NPRG041.
The course TIN071 Automata and Grammars is necessary to master the theory of the course and without theory it is impossible to master the practical exercises of the course.
Last update: Yaghob Jakub, RNDr., Ph.D. (26.07.2022)
Součástí výuky jsou praktické domácí úlohy v jazyce C++. Postačí znalosti pokryté předmětem NPRG041, dokonce stačí i souběžné studium s tímto předmětem.
Předmět TIN071 Automaty a gramatiky je nutný ke zvládnutí teorie předmětu a bez teorie není možné zvládnout praktická cvičení předmětu.
Last update: Yaghob Jakub, RNDr., Ph.D. (26.07.2022)