- 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.
Contents:
- 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)
Readings/Bibliography
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, which includes written exercises, examples of the discussed concepts, demonstrations, and comparisons between different approaches. 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
http://enricodenti.disi.unibo.it
Office hours
See the website of Enrico Denti
SDGs

This teaching activity contributes to the achievement of the Sustainable Development Goals of the UN 2030 Agenda.