Course (MSc): Compiler Construction

Page content

Programs that run on a computer are written in a computer language, and the languages used for writing computer programs have significantly evolved over time. By abstracting from the details of the underlying computer architecture, higher-level languages aim at making the process of developing a program simpler and more understandable than when using a lower-level language. Modern languages offer us a variety of different concepts for expressing (executable) programs. Domain-specific (modeling) languages are even created specifically to solve problems in a particular domain of interest. However, programs written in a higher-level language must be translated into a lower-level, executable representation, which requires various forms of compilers doing this job for us.

This course will provide students with an introduction to modern compiler construction. The first two-thirds of the course will cover classical topics ranging from scanning and parsing over semantic analysis and interpretation to code generation and optimization. In the exercises, we will develop a fully functional interpreter for our own programming language. The remaining third of the course is dedicated to study the transition form classical compiler techniques into principles of model-driven software development. In the exercises, we will develop a fully functional, domain-specific modeling environment.

Why should I take this course?

The magic of computer languages:

  • Ever wanted to make your own programming language or wondered how they are designed and built?
  • If so, this is already enough. But there are also very practical reasons:

Little languages are everywhere:

  • Even if you will most likely not be faced with the task of implementing a fully-fledged compiler in your professional life, there is a good chance you will find yourself in need of writing a parser in order to process various documents written in tiny little languages.

Domain-specific Languages and Model-driven Development

  • There has been a hype on DSLs and Model-driven development in the past, and larger software development projects in various domains successfully adopted these paradigms.
  • Building sophisticated model-driven software engineering environments is the backbone of running these projects.

Overview (Spring Semester 2024)

  • Lecturer: Timo Kehrer
  • Assistants: Sandra Greiner, Manuel Ohrndorf
  • Course materials: ILIAS
  • Lectures: Tuesdays 10:15 - 12:00 (Hörraum 101, Hauptgebäude H4)
  • Exercise hour: Tuesdays 12:15 - 13:00 (Hörraum 101, Hauptgebäude H4)
  • Stream/Podcast: Available through ILIAS course
  • Language: English
  • Start: Tuesday, 20th February 2024
  • Exam: Oral exam of 20 minutes; June 18 and 19, 2024
  • Course Repetition: Spring Semester 2025

Schedule (Spring Semester 2024)

Part I: Classical Compiler Construction

  • 20-Feb-24: Introduction
  • 27-Feb-24: Lexical Analysis: Handwritten Scanners
  • 05-Mar-24: Lexical Analysis: Scanner Generators
  • 12-Mar-24: Syntax Analysis: Grammars and Syntax Trees
  • 19-Mar-24: Syntax Analysis: Top-Down Parsing
  • 26-Mar-24: Syntax Analysis: Parser Generators
  • 02-Apr-24: No class (Spring Break)
  • 09-Apr-24: PEGs, Packrats and Parser Combinators (Guest Lecture by Oscar Nierstrasz)
  • 16-Apr-24: Semantic Analysis and Interpretation (I)
  • 23-Apr-24: Semantic Analysis and Interpretation (II)
  • 30-Apr-24: Code Generation and Optimization

Part II: Modeling Language Engineering

  • 07-May-24: Defining/Implementing Modeling Languages
  • 14-May-24: Modeling Technologies
  • 21-May-24: Q&A
  • 28-May-24: Add-on: Eclipse Modeling Framework & Tools