72940 - Computational Models And Languages M

Academic Year 2019/2020

  • Docente: Enrico Denti
  • Credits: 8
  • SSD: ING-INF/05
  • Language: Italian
  • Teaching Mode: Traditional lectures
  • Campus: Bologna
  • Corso: Second cycle degree programme (LM) in Computer Engineering (cod. 0937)

Learning outcomes

This 64-hour course aims to provide a rational view over the fundamental concepts of programming languages, relating them to the different computational models and to the problem of language translation and recognition. More precisely, we discuss the main formal methods for language definition, in terms of syntax and semantics, for both programming languages and specification languages, and relate them to different computational models. The main techniques for language evaluation and recognition are also presented. Students will then be able to define reasonably simple languages understanding their properties, implementing the corresponding interpreters, and evaluating the pros and cons of different choices/computational paradigms in application design. Multi-paradigm and multi-language issues are also presented.

Course contents

The course aims to provide a rational view over the fundamental concepts of programming languages, relating them to the different computational models and to the problem of language translation and recognition: solid foundations are coupled to a strong experimental approach.


  • Computability and Turing machine (5hrs)
  • Formal description of programming languages: grammars and Chomsky classification. Relationship between grammars and language interpreters/translators: lexical analysis, top-down and bottom-up techniques for the syntactical analysis of regular languages and context-free languages. Overview on methods for the formal description of the semantic aspects of a language. (18hrs)
  • Structure  and organisation of interpreters/compilers, and their run-time support: examples in Java. Parser generator tools. (14hrs)
  • Introduction to Model-Driven approaches: the Xtext case. (3 hrs)
  • Iterative vs. recursive computational models, tail recursion optimisation, basic concepts of functional programming, closures, models for function evaluation, intro to the basics of Lambda calculus (9hrs)
  • Javascript as an example of (dynamic) functional language with a prototype-based object model (6hrs)
  • Scala and Kotlin as notable examples of blended programming languages on the Java platform. (9hrs)


Please refer to the course's web portal for up-to-date information.

Teaching methods

Powerpoint slides (whose PDF printouts are available from the teacher's Web portalbefore the corresponding lecture) are projected and discussed during class hours. Exercises are continuously interleaved with theoretical concepts and immediatelydiscussed. Autonomous lab activities are welcome and promoted by suggesting ideas and possible testprojects.

Assessment methods

The exams consists of an oral discussion; if the student also selected the extra Work Project in this subject, the oral discussion can also include the presentation and discussion of the corresponding work project. However, it is also possible to discuss the main module and the extra work project separately.

Teaching tools

The teacher's web portal provides updated information, copy of the slides projected and discussed during the lecture hours, some extra material, and suggested books.

Links to further information


Office hours

See the website of Enrico Denti