|Website:||website containing additional information|
|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 12 subscriptions|
|Schedule:||Official schedule representation can be found in Osiris|
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:
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.)
|Minimum effort to qualify for 2nd chance exam:||The weighted sum of grades should be at least 4.|