Department of Information and Computing Sciences

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

Onderwijs Informatica en Informatiekunde

Vak-informatie Informatica en Informatiekunde

Compiler construction

Onderwijs:Het vak INFOMCCO wordt in 2020/2021 niet aangeboden.
Historie:Dit vak is de opvolger van Implementatie van programmeertalen (INFOIPT). Je kunt maar een van beide vakken voor je examen opvoeren
Nota bene:Er is geen recente vakbeschrijving beschikbaar.
Onderstaande tekst is een oude vakbeschrijving uit collegejaar 2017/2018

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.

Literatuur:Kan veranderen!

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.

Lectures; combined exercise and lab sessions.


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.)

Inspanningsverplichting voor aanvullende toets:Om aan de aanvullende toets te mogen meedoen moet de oorspronkelijke uitslag minstens 4 zijn.