Select Academic Year:     2017/2018 2018/2019 2019/2020 2020/2021 2021/2022 2022/2023
First Semester 
Teaching style
Lingua Insegnamento

Informazioni aggiuntive

Course Curriculum CFU Length(h)
[60/61]  COMPUTER SCIENCE [61/00 - Ord. 2016]  PERCORSO COMUNE 9 84


1. Acquiring knowledge and understanding
The course, devoted to third year students, has as main target the achievement of all the knowledges, both theoretical and practical, that will allow the complete comprehension and their effective applicability of
the design, development and implementation processes that are at the basis of programming languages.

2. Applying knowledge and understanding
The course will illustrate methodologies concerning the formal semantics of programming languages, and
students have to become proficient in the realization of (part of) interpreters for programming languages

3. Making informed judgements and choices
The course provides all the tools and notions to face critically every problem connected to the implementation, use and extension of programming languages.

4. Communicating knowledge and understanding
The written proof, with open questions, allows the student to show his capability of exposing in a clear and
coherent manner the treated arguments.

5. Learning capabilities
The course gives an adequate background to be able to face all the problems concerning the design,
development and implementation of programming languages, and gives the key notions to comprehend the
theory and applications of programming languages.


1. Knowledge
The course requires that the student has attended and possibly get a score in: Programmazione 2, Automi e Linguaggi Formali, Programmazione 1, Matematica Discreta and Algoritmi e Strutture Dati 1.

2. Skills
Students must be able to program in all the programming languages learned so far (C, Java, Javascript, an
Assembly Language)

3. Competence
Experience in programming according to various programming paradigms (e.g. imperative, object oriented, etc).

Preparatory courses:
In order to attend fruitfully to Linguaggi di Programmazione the student must have a positive grade in Matematica discreta, Automi e linguaggi formali, Fisica e metodo scientifico and Calcolo differenziale ed integrale.


The course has two parts: theory (lessons, 48 hours) and practice (36 hours in lab).

During the 36 in Lab, the student will learn ho to write in a functional language (usually Ocaml) interpreters and type inferences systems for various programming languages belonging to various programming paradigms.

Theory lessons are divided into some groups:

  • nel primo gruppo di lezioni si illustrano le nozioni che servono per poter definire e capire quale è il significato dei programmi scritti in un linguaggio di programmazione. I risultati teorici vengono presentati alla luce delle necessità che li hanno determinati, necessità che nascono dall'evoluzione dei linguaggi stessi.
    in the first group focusses on the notions that are the basis for a formal approach to the meaning and the execution of a programming language. The theoretical results are cast on the light of the historical development of programming languages and the needs that have driven the evolution of the programming languages and paradigms.

  • the lessons the second group focus on modeling the execution of a program in abstract syntax of a programming language via the notion of structured operational semantics (SOS). To formalize the execution (the semantics) of a program the notions of environment, memory and all the data structure needed are introduced and made precise. The notion of binding and scoping are illustrated, either in the case that functions are passed as arguments or in the case that functions are the result of an evaluation.

  • in the third group the notions connected to the notion of type are investigated. Type constructions is defined as well as the notion of typing system, parametric and polymorphic type. Implementation techniques are illustrated as well.

Lectures of the second and the third group are not strictly ordered, as the notion concerning types are intertwined with the semantics ones.

Teaching Methods

Concerning the lab, the lessons is divided in a part where the concept, methods and constructs are
illustrated and a second part is devoted to actually verify one a computer the notion and methods learned
so far.

Theory lectures are given using blackboard. At least a third of the hours of the course is devoted to the solution of problems that arise during the theory part.

Compatibly with the mixed teaching methods foreseen in the Academic Manifesto for the Academic Year 2020-21, following the COVID-19 emergency, the tools used for the lectures will be given using both the blackboard and the tablet allowing that both theory lectures and Labs lectures can be attended both in the class and via internet streaming.

Verification of learning

The exam is organized as follows:

  • a written exam on the theory part (18 points)

  • a project concerning the implementation of a programming languages or techniques connected to the verification
    of properties of programming language (5 points).
    The project must be written in ocaml and the delivered on a fixed deadline. Missing the deadline results
    in loosing parts of the points devoted to this. The project must be done in groups.

  • An oral exam on the written part and the project (8 points)

  • Accordingly to the Manifesto of Studies for the A.Y. 2021-22 following the COVID-19 emergency, lessons will be mainly given in class, integrated and augmented with online strategies, to assure the correct and fruitful attendance. Exams will follow the same guidelines.


    M. Gabrielli, S. Martini, Linguaggi di Programmazione. Principi e paradigmi, 2a edizione, McGraw-Hill

    G. Winskel, La semantica formale dei linguaggi di Programmazione, UTET Universitaria

    J. E. Hopcroft, R. Motwani, J. D. Ullman, Automi, Linguaggi e Calcolabilità, Addison Wesly

    More Information

    Further material (slides, papers) is available on the moodle platform

    Questionnaire and social

    Share on:
    Impostazioni cookie