This is a course about implementing programming languages.
It aims to teach the fundamental aspects of analysing
programming languages and mapping them into executable form. At
the end of the course, the student should
- be able to define the formal syntax of a programming language,
- be able to define the semantics of a language through interpreters,
- know the internal structure and implementation of compilers,
- be able to write a compiler that translates a simple language
into the code of a virtual machine,
- know common frameworks and design patterns used in compiler
- know runtime representations of important programming constructs.
Some less tangible, but nevertheless important goals are:
The course and the tutorials are given in English.
- Improving the understanding of programming languages,
- understanding trade-offs between expressiveness, simplicity,
and performance of programming languages,
- experience the design and implementation of a
software project where theory is essential for success.
Lecturer: Prof. Martin Odersky
||Wednesday 11:15-13:00, room IN2
||Friday 13:15-15:00, room IN3
The oral exam will be held Friday, 09.02.01 in IN3. There, every
group has to present the final assignment and every group member is
asked individually about the project and the lecture. The schedule for
the exam can be found on our whiteboard in building INR, third floor.
We are trying to publish our lecture slides as soon as possible. Since we
extend the slide set continously, it may happen, that you downloaded
a preliminary version. To help you keeping your printed slides updated,
we started issuing version numbers. As soon as a slide set is complete,
it is marked as final.
Important news concerning the tutorials and your project
will be announced here. You will also find frameworks
that support your practical work. For now, there's only
the latest exercises sheet and the grammar for our source
- BNF/EBNF Grammars, Introduction to J0 (27.10.2K)
- Lexical Analysis for J0 (03.11.2K)
- Finite Automatons
- Syntactical Analysis for J0 (17.11.2K)
- Abstract Syntax Trees (01.12.2K)
- Name Analysis and Typechecking (15.12.2K)
- Code Generation (12.01.01)