User Tools

Site Tools


Programming Languages

The goals of this course are:

  • Highlighting the basics features of various programming paradigms
  • Getting a grasp of the mathematical theory behind programming languages
  • Gently introducing functional programming languages
  • Implementing some abstract machines and static analyses for programming languages.

Check constantly also the news page of the website, do not stick to this page.


L'ultimo appello si svolge il 13 settembre alle ore 15 in Aula Magna di Matematica e non il 5 settembre.

Bisogna iscriversi non solo su esse3 ma anche su moodle (alla corretta categoria). Le iscrizioni su moodle aprono il 25 agosto e chiudono il 10 settembre.

Chi non ottiene tutti i voti nell'anno accademico perde quelli che ha ottenuto.


The course grade will be determined as follows:

Test 270 Date
Lab test #1 10% 25/10/2016
Lab test #2 10% 22/11/2016
Lab test #3 10% 20/12/2016
Lab final project 20% 05/02/2017
Theory midterm #1 10% 27/10/2016
Theory midterm #2 20% 01/12/2016
Theory midterm #3 20% 12/01/2017

The deadlines for Lab tests and projects are firm.

Lab tests can be repeated according to the rules stated in the introductory slides. The Lab final project has to be delivered in time, and no projects will be evaluated if delivered after the deadline.

Attendance of lab classes is required, both for 270 and 509 students.

How to participate to the Lab test

Read the following note.

Read the following note containing instructions for the registration of the obtained course grade and how to repeat some of the theory proofs.

How to obtain the grade in the Lab tests

The main way is to attend Lab lessons (on Tuesday) and do the three tests. For those who fails the three Lab tests or would like to have a better grade, there will be the special test in June 2017 (see below). This test will cover and substitute the three tests, and participating regardless the actual delivering of the solutions will cancel the previous Lab tests grade.

Special Lab test (June 2017)

The Lab test for those who would like to have a grade or a better grade will take place on June, 2017 (the date will be set in May 2017) in Laboratorio T. Students wishing to do this test have to enrol on the moodle platform starting from June 1st. Recall that once you take place to the test, the grade for the Lab test will be the last one, regardless the one you may possibly got before. From the beginning of the proof you have 15 minutes to decide whether to continue or to stop. If you continue the grade will be the one you will get in that test, if you stop it will remain the one you had before. The whole test will last two hours.

How to obtain the grade in the Project

Just deliver the project in time. This is the unique possibility.


The project is available at following link. A file with some FAQ is available.

The project have to be done in groups, and groups have to be formed at most by 4 components (recommended choice). Each group must have a representative and, after forming groups, each representative has to send an email containing the names of the components (including herself/himself). The email should be sent no later than the 5th of January. I will assign to each group an identifier and communicate it to the groups representative, and the representative is responsible for submitting the project (in a single, tarred and gzipped file which name is identifier.gz). The project will be submitted in the appropriate moodle section. I will not consider any project delivered in the wrong place or by the wrong person. Once that a group is formed, the additions or the removal of a component will produce a penalty (to be subtracted from the project score). Groups representatives are encouraged to email me asking for every possible information.

When needed, I will communicate via email with the groups representatives.

The deadline for delivering the project is firm. There will be no exception.


The page with the score is available at the following link. Recall that the final grade is obtained summing all the scores of the various proofs.

The final grade may not be the exact sum of the various proofs, but it can be a rounding of this sum. Rounding will be applied at the end. If the grade is in bold, it means that the rounding has been applied, hence it can be registered.

The final grade (if applicable, i.e. if it is greater or equal to 18) will be filled as soon as it is available.


The moodle platform is used to deliver the solutions of the project and of the Lab Tests. Registration on the noodle platform is mandatory. To register to the course you have to email me (starting from October, the 4th), with the following subject “[LIP] Iscrizione moodle” and containing you complete name and “numero di matricola”. I will register each student sending the email. The course is accessible at the following url:

The Lab Tests are organized in two groups, and you have to register, when advised to do so, just to one of them. Lab Tests take place in “Laboratorio T”, and you are supposed to arrive at least 15 minutes before your test is scheduled to begin. Students arriving late will have less time to solve the test. The Gruppo 1 starts at 11:00 and the Gruppo 2 starts at 12:30.

Teaching material

Class lectures

  1. Introductory Lecture (04/10/2016) slides
  2. Context-free grammars (CF grammars) (05/10/2016) slides
  3. Push-down automata (PDA Automata) (06/10/2016) slides
  4. Equivalence of PDA and CF grammars (12/10/2016). Same slides of the lecture of the 6th of October
  5. Normal forms and Pumping Lemma (13/10/2016) slides (this set of slides contains material that will be used in some other lectures: it is on closure properties of CF languages)
  6. Closure properties of CF languages (19/10/2016) (slides are those associated to the previous lecture)
  7. Condensed history of Programming Languages (02/11/2016) slides
  8. Semantics (03/11/2016) slides (see also the appendix of the Gabbrielli-Martini's book)
  9. Landin's SECD machine (09/11/2016) slides (see also the paper “Abstract machines for programming language implementation” on abstract machines)
  10. Abstract Machines and Environment (16/11/2016-17/11/2016) slide (see also the paper “Abstract machines for programming language implementation” on abstract machines)
  11. RdA Stack and parameters (23/11/2016) slides and slides
  12. Higher order and exceptions (24/11/2016) slides
  13. Data (07/12/2016) slides
  14. Type systems, type checking and type inference (14/12/2016 - 15/12/2016) see the slides of the previous lectures, and on type inference, the original Milner's paper, the Damas-Milner's version or the description of an implementation


Lab slides & exercises

  1. Introductions to functional programming and OCAML basic: slides
  2. Function definition and recursive functions: slides | exercises
  3. Higher order functions and polymorphism: slides | exercises | homework
  4. Lists and pattern matching: slides | exercises
  5. Map and Filter on list: slides | exercises | brain teaser
  6. Fold and tagged unions: slides | exercises
  7. Esercitazione: link
  8. Exercises: exercises

Further documentation

  1. Ocaml basics: emacs mode; arithmetic expressions; booleans and conditionals; definitions; functions; partial functions; compiling. ( assignment )
  2. IMP interpreter: (sources)

Books and online resources

Here you can find some links to teaching resources about OCaml.

lip.txt · Last modified: 2017/08/22 17:14 by gmpinna