icl-2025

Interpretation and Compilation of Languages (2025)

Project: Mini Python

The project assignment can be found here.

Office hours

Please inform before (by email) that you plan to attend office hours.

Instructor Schedule E-mail
Mário Pereira Wednesday, 14h00 (Office 243) mjp.pereira@fct.unl.pt

Installation procedures

The OCaml language and ecosystem

The OCaml language is our tool of choice for the most part of the ICL course. We are going to use OCaml during lectures, to present fundamental concepts about languages and compilers, as well as in practical sessions to implement and experiment with some of the main concepts presented during lectures.

In order to install OCaml and the language ecosystem, please follow the installation guide provided here.

During the ICL course I will also provide Java implementations of the majority of the exercises, as well as the project skeleton. However, I strongly recommend, and believe me it is of your best interest, to use OCaml as a vehicle to learn about compilers design. OCaml (and overall functional programming languages) is a perfect choice to design and implement compilers. Java, on the other hand, it is not a good choice to do so.

Planning

Week Date Topics Slides Labs
1 11 Mar Introduction to the ICL course and the OCaml language Lecture 1  
1 11 Mar Exercises using the OCaml language   Lab 1
2 18 Mar Abstract syntax, semantics, and interpreters Lecture 2  
2 18 Mar Pen-and-paper exercises on semantics   Lab 2
Bonus, in OCaml
Bonus, in Java
3 25 Mar Lexical analysis Lecture 3  
3 25 Mar Mini-python interpreter   Lab 3, in OCaml
Lab 3, in Java
4 1 Apr Parsing, part 1: top-down analyzers Lecture 4  
4 1 Apr Pen-and-paper exercises on context-free grammars and LL(1) parser   Lab 4
5 8 Apr Parsing, part 2: bottom-up analyzers Lecture 5  
5 8 Apr Syntactic Analysis of Mini-turtle   Lab 5, in OCaml
Lab 5, in Java
6 15 Apr Static Typing Lecture 6  
6 15 Apr Mini-C Type Checker & Exercises   Lab 6, exercises
Lab 6, in OCaml
Lab 6, in Java
7 22 Apr X86-64 Assembly Lecture 7  
7 22 Apr Exercises on X86-64 Assembly   Lab 7
8 29 Apr Evaluation Strategies and Parameter Passing Lecture 8  
8 29 Apr Help with the project    
9 6 May Compilation of Object-Oriented Languages Lecture 9  
9 6 May Help with the project    
10 13 May Compilation of Functional Languages Lecture 10  
10 13 May Help with the project    
11 20 May Optimizing compiler, part 1 Lecture 11  
11 20 May Help with the project   Lab 11, support slides
12 27 May Optimizing compiler, part 2 Lecture 12  
12 27 May Help with the project   Lab 12, support slides