Department of Information and Computing Sciences

Departement Informatica Onderwijs
Bachelor Informatica Informatiekunde Kunstmatige intelligentie Master Computing Science Game&Media Technology Artifical Intelligence Business Informatics

Onderwijs Informatica en Informatiekunde

Vak-informatie Informatica en Informatiekunde

Compiler construction

Website:website containing additional information
Course code:INFOMCCO
Credits:7.5 ECTS
History:This course was formerly known as Implementatie van programmeertalen (INFOIPT). You can only do one of these courses.
Period:period 4 (week 17 through 26, i.e., 23-4-2018 through 29-6-2018; retake week 28)
Participants:up till now 17 subscriptions
Schedule:Official schedule representation can be found in Osiris
Teachers:Dit is een oud rooster!
lecture   Mon 13.15-15.0018-20 ANDRO-C138 Jurriaan Hage
22-25 ANDRO-C138
Tue 13.15-15.0017 RUPPERT-011
Thu 9.00-12.4517-18 ANDRO-C138
20-25 ANDRO-C138
week: 26Tue 25-6-201913.30-16.30 uurroom: BBG-223
week: 28Tue 9-7-201913.30-16.30 uurroom: BBG-017retake exam

Computer programs are usually written in a high-level programming language, such as C, Java, or Haskell. Execution of such programs requires either a compiler or an interpreter for the language.

In its most general form, a compiler is a piece of software that takes as input a program written in a given language and produces as output a translation of that program into another language. Examples include: compilers that translate C programs into machine code for an IA-32 processor, compilers that translate Java programs into bytecode instructions for the Java Virtual Machine, and software for translating LaTeX documents into HTML. In contrast, interpretation is concerned with the direct execution of (the actions described by) a source program.

In this course, we study the internals of compilers. We do so by considering some of the language concepts that typically appear in modern imperative and functional programming languages, and by looking at what kind of analyses these constructs require in order to be effectively compiled. We look at formalisms, tools, and programming techniques that are particulary well-suited for crafting compilers, in particular syntax-directed programming by means of attribute grammars.

In addition to the topic of syntax-directed programming, we also study code generation, static analysis of first-order languages, and analysis of higher-order languages. The latter includes type inferencing for a polymorphic functional language.

On a practical level, participants are assumed to be familiar with the basic concepts of imperative and functional programming and knowledge of lexing and combinator-based parsing will be helpful. However, basic knowledge of and experience with the Haskell programming language is essential to do the practical assignments. Note, though, that you are not expected to have done the course on Advanced Functional Programming. The use of attribute grammars will be taught and practiced during lab exercises.


Slides and the following book:
Principles of Program Analysis
Nielson, Flemming, Nielson, Hanne R., Hankin, Chris
Corr. 2nd printing, ISBN: 3-540-65410-0.

Other material may be made available throughout the course.
Course form:

Lectures; combined exercise and lab sessions.

Exam form:

Written exam; lab assignments.

The overall grade is determined by taking the weighted sum of the result for the written exam (which a weight of 50 percent) and the combined result for the lab assignments (50 percent), provided that neither of the two components is less than 5. (If either of the two components is in fact less than 5, then the overall grade is the minimum of 5 and the aforementioned weighted sum.)

Minimum effort to qualify for 2nd chance exam:The weighted sum of grades should be at least 4.