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

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., 22-4-2019 through 28-6-2019; retake week 28)
Participants:up till now 47 subscriptions
Schedule:Official schedule representation can be found in Osiris
lecture   Tue 13.15-15.0017 BBG-061 Jurriaan Hage
18-24 BBG-214
25 BBG-209
Thu 9.00-12.4517-21 BBG-201
23-25 BOL-1.082
Note:No up-to-date course description available.
Text below is from year 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.

Literature:May change!

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:To qualify for the retake exam, the grade of the original must be at least 4.