**Program:**
The lecture covers the following topics:
* General introduction, Organization of lectures. History of higher programming languages.
* Why hacking is not a solution. We write a simple program for parsing and evaluating numerical expressions, and observe that this quite is difficult. We identify some components of the program. (2-3 lectures)
* Parsing through attribute grammars. LR(1) parsing, LALR parsing. Standard tools for parsing (Yacc/Bison) Parsing with user defined operators. Printing of expressions.
* Tokenizing with NDFAs.
* How to compile C and C++. Type systems for C and C++.
* Abstract Interpretation. This is a technique for predicting properties of variables at runtime. (For example that they are constant, initialized, within certain bounds, of a certain type, etc.) It is used for compiler optimization.
* Static Single Assignment normal form. Code optimization techniques. Register assignment.
* Code generation by tree matching
* Garbage collection.
**Wymagania:** Knowledge of C or C++. Knowledge of a functional language.