Přeskočit na hlavní obsah
Přeskočit hlavičku
Ukončeno v akademickém roce 2021/2022

Programovací jazyky a překladače

Typ studia bakalářské
Jazyk výuky angličtina
Kód 460-2018/02
Zkratka PJP
Název předmětu česky Programovací jazyky a překladače
Název předmětu anglicky Programming Languages and Compilers
Kreditů 6
Garantující katedra Katedra informatiky
Garant předmětu Ing. Marek Běhálek, Ph.D.

Osnova předmětu

Přednášky:
Úvod: Cíle a náplň předmětu, požadavky, organizace cvičení, literatura. Klasifikace programovacích jazyků. Účel a základní aplikace překladačů. Zdrojový a cílový jazyk. Popis programovacích jazyků. Formální metody pro popis syntaxe a sémantiky.
Historie programovacích jazyků a překladačů: Teoretická východiska. První programovací jazyky a překladače. Vyšší programovací jazyky. Strukturované programování. Modulární jazyky. Objektově-orientované jazyky. Skriptovací jazyky.
Funkcionální a logické programovací jazyky: Deklarativní styl programování, jeho výhody a nevýhody. Základy lambda kalkulu. Praktická implementace jednoduchých úloh v programovacím jazyce Haskel.
Skriptovací jazyky: Popis odlišnosti od tradičních jazyků. Základní představitele. Praktické ukázky skriptovacích jazyků. Stručný úvod do programovacího jazyka PHP.
Imperativní programovací jazyky: Základní principy. Jiná paradigmata programování.
Objektově orientované programování: Shrnutí základních principů. Méně obvyklé objektově orientované programovací jazyky. Programování založené na prototypech.
Struktura a funkce překladače: Modely zdrojového kódu, transformace. Organizace překladače - fáze překladu, průchod. Jednoprůchodové a optimalizující překladače. Pomocné programy. Testování a údržba překladače.
Lexikální analýza: Funkce lexikálního analyzátoru, implementace lexikálního analyzátoru.
Syntaktická analýza: Účel a metody syntaktické analýzy. Analýza shora dolů a zdola nahoru. LL(1) gramatiky, výpočet množin FIRST a FOLLOW. Rozkladová tabulka.
Implementace syntaktického analyzátoru: Analýzu rekurzivním sestupem. Nástroje pro generování překladačů (jako příklad JavaCC)
Syntaxí řízený překlad: Překladová gramatika, atributová překladová gramatika. Implementace atributového překladu při analýze shora dolů.
Tabulka symbolů a struktura programu v době běhu: Základní pojmy - vazba, rozsah platnosti, viditelnost, doba života. Funkce tabulky symbolů, blokově strukturovaná tabulka symbolů. Implementace. Systém řízení běhu programu. Podprogramy - aktivace, statická a dynamická struktura, aktivační záznam. Organizace paměti, přidělování paměti pro aktivační záznamy, přístupové ukazatele.
Poslední fáze při překladu: Generování vnitřní reprezentace programu (formáty vnitřní reprezentace - graf, zásobníkový kód, tříadresový kód), Provádění optimalizaci (základní rozdělení optimalizací, příklady různých optimalizací), generování cílového kódu.


Cvičení (probíhají jen na PC učebnách):
Řešení problémů s využitím různých paradigmat na základě intuitivního zavedení potřebných jazykových konstrukcí
Ukázky deklarativního stylu programování. Praktické realizace jednoduchých úloh v programovacím jazyce Haskell.
Praktická realizace úloh v jazyce Haskel.
Skriptovací jazyky: Praktická realizace jednoduchých úloh ve skriptovacím jazyce PHP
Imperativní a objektové jazyky: Ukázky netradičních programovacích jazyků a různých paradigmat pro programování.
Praktická tvorba programů v nějakém netradičním jazyce, vytváření vlastních jednoduchých příkladů.
Samostatná práce na prvním projektu. Možnost konzultací prvního projektu.
Implementace jednoduchých filtrů a lexikálního analyzátoru.
Realizace příkladů gramatik pro základní syntaktické konstrukce (opakování, opakování s oddělovačem, složitější konstrukce). Převod gramatiky s regulárními výrazy na standardní tvar.
Implementace algoritmů pro výpočet množin FIRST a FOLLOW.
Demonstrace činnosti syntaktického analyzátoru LL(1) a LR(1). Implementace překladače rekurzivním sestupem.
Implementace lexikálního a syntaktického analyzátoru s využitím programu JavaCC.
Samostatná práce na druhém projektu.

Povinná literatura

Beneš, M.: Překladače. Elektronická skripta.

Torben Mogensen: Basics of Compiler Design - zdarma dostupné online na http://www.diku.dk/hjemmesider/ansatte/torbenm/Basics/

Doporučená literatura

Aho, A. V., Lam M.S., Sethi, R., Ullman, J. D.: Compilers. Principles, Techniques, and Tools. Addison Wesley; 2nd edition (September 10, 2006). ISBN 0321486811 .

Pierce B.C.: Types and Programming Languages, MIT Press, 2002, ISBN: 9780262162098.