Compiler Construction 2013


Format Lecture course with lab sessions
Curriculum MSc Computer Science
Block 2a (Feb 3 - Mar 28, 2013)
Status Constrained choice
ECTS 6 credits
Language English
Objectives

To develop the ability to design and implement compilers for diverse purposes.

Contents

As implementations of programming languages compilers are integral parts of any computing system software stack. The more general task of compilers to transform structured text from one format to another is ubiquitous in all areas of computer science. Step-by-step the course covers all aspects of modern compiler design and implementation: lexical and syntactical analysis, context/type checking and inference, high-level code transformations/optimisations, target code generation and the interplay between compilers and runtime/operating systems. A model programming language that exposes common imperative programming features, as found in languages such as C, Pascal or Java, serves as a case study throughout the course. Organised in the form of a software engineering project participants develop a fully-fledged compiler for this language targeting a virtual machine similar to the Java Virtual Machine.

Lecturer Dr Clemens Grelck
Assistants Simon Polstra
Fangyong Tang
Lectures Tue, 13-15
Thu, 11-13
Labs Tue, 15-17
Thu, 13-15
Exam We have no written exam; the final grade is determined by the project and the weekly assignments.
Grading Project (70%), Assignments (30%)
You need a minimum grade of 6 in each category to pass the course!
The project must be worked on (!) and submitted in groups of two students; the weekly assignments must be done and submitted individually.
Slides Will be made available on Blackboard after the lecture.
Contents
  • Chapter 1: Introduction and Motivation
  • Chapter 2: Compilers at a Glance
  • Chapter 3: Lexicographic Analysis
  • Chapter 4: Syntactic Analysis
  • Chapter 5: Semantic Analysis
  • Chapter 6: Optimisation
  • Chapter 7: Code Generation
  • Chapter 8: Memory Management
Project

In the project we implement a fully-fledged compiler for a non-trivial model language named CiviC ("Civilised C"). The language combines essential ideas from C, Pascal and Fortran into a fairly simple language design that allows us to focus on essential concepts in compilation techniques rather than providing support a complete real world programming language.
After lexicographic, syntactic and semantic analysis as well as some optimisation your compiler is supposed to generate code for the CiviC Virtual Machine CiviC-VM, a byte code interpreting virtual machine with many similarities to the Java-VM.
Your practical work will be supported by a fully-fledged compiler construction framework that has proved itself in a number of academic compiler projects. As documentation of this framework is unfortunately a bit scarce, your presence during the first labs, where a hands-on tutorial is given, is crucial.
The CiviC language manual and all further documentation are available on Blackboard.
Project due date: March 30, 2013.

Assignments The purpose of the theoretical assignments is to deepen your understanding of compiler construction and to complement the practical work undertaken in the project. The assignments will be made available on Blackboard.
Mailing List The UvA mailing list CoCo2013 serves as the primary medium of communication between lecturers and participants as well as among participants themselves. Subscription to the mailing list is controlled and restricted to participants of the course. Traffic on the mailing list is archived; access to the archives is restricted to participants. Please, subscribe here.
Background Material Bison Manual
Literature The course does not follow any specific text book. The following list summarises a number of interesting textbooks on various aspects of the course. While books are always a helpful source of background information, I do not expect participants of the course to buy any or all of these, nor do I receive revenues from any of these books.
  • Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: Compilers: Principles, Techniques, and Tools, Addison Wesley, 2007.
  • Keith D. Cooper, Linda Torczon: Engineering a Compiler, Morgan Kauffmann, 2004.
  • Andrew W. Appel, Maia Ginsburg: Modern Compiler Implementation in C, Cambridge University Press, 2004.
  • D. Grune, H. Bal, C. Jacobs, K. Langendoen: Modern Compiler Design, John Wiley & Sons, 2000.
  • Randy Allen, Ken Kennedy: Optimizing Compilers for Modern Architectures, Morgan Kauffmann, 2000.

Valid HTML 4.01!     Valid CSS!             Dr. Clemens Grelck