Anno accademico 2020-2021


Pietro Di Gianantonio
Anno di corso: 3
Totale crediti: 9
Tipologia: Caratterizzante
Periodo didattico: Secondo Periodo
Prerequisiti. The knowledge acquired in the courses: Foundations of Computer Science, Programming and Laboratory, Object Oriented Programming, Operating Systems.
Metodi didattici. Lectures, exercises.
Modalità di verifica. The exam consists of a written test and an oral exam. The written exam consists of a series of exercises and aims to evaluate the ability to apply the acquired skills. The oral test, mandatory for all, consists of a series of questions and aims to evaluate the depth of acquired knowledge.


The aim of the course is to deepen the knowledge related to programming languages. Using the knowledge already acquired, in the past years, on different programming languages, we introduce notions and “universal” principles that guide the definition and implementation of modern programming languages.

Acquiring a solid base of general knowledge allows to move with a certain ease between the various programming languages ​​and allows to learn new languages ​​quickly and effectively. The knowledge of the implementation aspects allows to have an estimate of the cost of execution of the different programming language constructors and therefore provides the basic information for the efficient code writing.

In the particular course emphasis is given to the functional programming paradigm for its cleaning and expressiveness features. The Haskell functional language is presented and it is then shown how mechanisms such as high-order and non-determinism can be exploited to write compact, elegant and flexible (reusable) code.


Abstract machines, interpretation and compilation.

Introduction to the compilers structure.

Describe a programming language: syntax, semantics, pragmatics.

Lexical analysis. Syntactic analysis. Analyzer, lexical and syntactic generators: Lex, Alex, Yacc, Happy.

The names and the environment.

Memory management.

Structuring the control. Abstract on control: procedures and functions.

Structuring data: data types in programming languages.

Object-oriented paradigm.

Functional paradigm. Introduction to functional programming. Haskell language.

Type assignment systems, formal description.

Concurrent programming.


M. Gabbrielli e S. Martini. Programming Languages: Principles and Paradigms. Springer. ISBN-13: 978-1848829138

[HPF] P. Hudak, J. Peterson, J. Fasel. A gentle introduction to Haskell’98. Available online.

[Car] Cardelli (2004). “Type systems”. In Allen B. Tucker. CRC Handbook of Computer Science and Engineering(PDF) (2nd ed.). CRC Press. ISBN 158488360X. Available online.

[Al] Alex user guide. C. Dornan, I. Jones, S. Marlow. Available online.

[Ha] Happy user guide. S. Marlow, A. Gill. Available online.