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:periode 2 (week 46 t/m 4, dwz 9-11-2015 t/m 29-1-2016; herkansing week 12)
Participants:up till now 16 subscriptions
Schedule:Official schedule representation can be found in Osiris
college   di 9.00-10.4546-51 BBG-079 Atze Dijkstra
Jurriaan Hage
1-3 BBG-079
do 13.15-15.0046-51 BBG-075
1-3 BBG-075
werkcollege groep 1 di 11.00-12.4546-51 UNNIK-214
1-3 UNNIK-214
do 15.15-17.0046-49 BBG-385
50-51 BBG-385
1-3 BBG-385
Nota bene:Er is geen recente vakbeschrijving beschikbaar.
Onderstaande tekst is een oude vakbeschrijving uit collegejaar 2014/2015

Computer programs are usually written in a so-called 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 certain (usually: high-level) language and produces as output a translation of that program into another (more low-level) 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; but also: 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 workings of compilers and interpreters. We do so by considering some of the language constructs 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 compiled or interpreted. We delve into formalisms, tools, and programming techniques that are particulary well-suited for crafting compilers and interpreters, but that are often also useful and relevant for other, more general forms of software construction.

On a practical level, participants are assumed to be familiar with the basic concepts of imperative and functional programming as well as the essentials of lexing and combinator-based parsing; knowledge of and experience with the Haskell programming language is recommended. The use of Attribute Grammars is part of the course and will be practiced during lab exercises.

Literature:kan veranderen!

Lecture notes.

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 weighs in with 60 percent) and the combined result for the lab assignments (40 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 will be given by the minimum of 5 and the aforementioned weighted sum.)

Minimum effort to qualify for 2nd chance exam:Om aan de aanvullende toets te mogen meedoen moet de oorspronkelijke uitslag minstens 4 zijn.