Scheda programma d'esame
PRINCIPLE OF PROGRAMMING LANGUAGESĀ 
ANDREA CORRADINI
Academic year2016/17
CourseCOMPUTER SCIENCE
Code603AA
Credits9
PeriodSemester 1
LanguageEnglish

ModulesAreaTypeHoursTeacher(s)
PRINCIPI DEI LINGUAGGI DI PROGRAMMAZIONEINF/01LEZIONI72
ANDREA CORRADINI unimap
Obiettivi di apprendimento
Learning outcomes
Conoscenze

Il corso e' diviso in due parti. Nella prima parte lo studente acquisira' conoscenze relative a teoria, principi, tecniche e strumenti per la costruzione e la generazione di compilatori, con maggior enfasi sul front-end e su alcune tecniche di analisi statica e di ottimizzazione del codice. Nella seconda parte lo studente approfondira' la conoscenza di alcuni costrutti di programmazione avanzata supportati dai vari paradigmi di programmazione, in modo indipendente da specifici linguaggi e con attenzine a tecniche per la loro compilazione e per il corrispondente supporto a runtime.

Knowledge

The course is made of two parts. In the first part the student will acquire knowledge about theory, principles, techniques and tools for the construction and the generation of compilers, with greater enphasys on the front-end and on some techniques of static analysis and code optimization. In the second part the student will deepen the knowledge of some advanced programming constructs supported by the various programming paradigms, in a way independent of specific programming languages and with attention to techniques for their compilation and for the corresponding runtime support.

Modalità di verifica delle conoscenze

La prova scritta ha l'obiettivo di accertare che lo studente abbia acquisito sufficiente familiarita' con i concetti e le costruzioni alla base del front-end di un compilatore, con alcune tecniche di verifica, con aspetti di scoping e type checking di linguaggi di programmazione. Con la prova orale si verifichera' che lo studente abbia assimilato in modo critico i concetti introdotti nel corso.

Assessment criteria of knowledge

The written exam aims to ensure that the student has acquired sufficient familiarity with the concepts and constructions at the basis of a compiler's front-end, with some verification techniques, with scoping and type checking aspects of programming languages. The oral exam will assess that the student has critically assimilated the concepts introduced in the course.

Capacità

Al termine del corso lo studente sapra' analizzare linguaggi di programmazione anche non conosciuti relativamente ai costrutti da essi offerti, agli schemi di compilazione o interpretazione per essi disponibili, e all'adeguatezza per specifici campi applicativi. Inoltre avra' la capacita' di comprendere e analizzare la struttura di un compilatore allo stato dell'arte in termini delle componenti che lo costituiscono e delle loro interazioni.

Skills

At the end of the course the student will be able to analyze programming languages, even if not known before, with respect to the constructs they offer, the compilation or interpretation schemes available for them, and the suitability for specific application fields. The student will also have the capability to understand and analyze the structure of a state-to-the-art compiler in terms of its components and their interactions.

Modalità di verifica delle capacità

L'accertamento delle capacita' avviene tramite colloquio nell'esame finale del corso

Assessment criteria of skills

Colloquium with the lecturer in the final oral exam.

Prerequisiti (conoscenze iniziali)

Conoscenza di qualche linguaggio di programmazione, preferibilmente di paradigmi diversi (funzionale, imperativo, orientato ad oggetti). Familiarita' con notazione  matematica, teoria dei linguaggi formali e espressioni regolari.

Prerequisites

Knowledge of some programming language, preferably of different paradigms (functional, imperative, object-oriented). Familiarity with mathematical notation, formal language theory, regular expressions.

Prerequisiti per studi successivi

Il corso e' un prerequisito consigliato per Advanced Programming

Prerequisites for further study

The course is a suggested prerequisite for Advanced Programming

Indicazioni metodologiche
  • Il corso e' insegnato in Inglese.
  • Le lezioni frontali si svolgono con uso di slide e della lavagna.
  • Le esercitazioni si svolgono in aula: gli studenti svolgono degli esercizi, anche in gruppo, sotto la supervisione del docente.
  • Un tutor e' disponibile su appuntamento per gli studenti, principalmente per rivedere con essi eventuali argomenti richiesti nei prerequisiti ma non conosciuti dagli studenti.
  • L'interazione con il docente avviene con colloqui (in orario di ricevimento o su appuntamento) e tramite posta elettronica.
  • Sulla pagina web del corso vengono pubblicati progressivamente i lucidi presentati in ogni lezione, con riferimenti ai corrispondenti argomenti nei libri di testo. Vengono anche pubblicati i testi degli esercizi proposti per le esercitazioni.
  • Il materiale didattico e alcuni esempi di testi di esame sono accessibile sul sito di elearning del corso.
  • Il corso prevede due prove intermedie il cui superamento esonera lo studente dalla prova scritta di esame.
Teaching methods
  • The course is taught in English.
  • Frontal lessons are performed using slides and blackboard.
  • Exercises take place in the classroom: students practice exercises, even in groups, under the supervision of the lecturer.
  • A tutor is available on appointment for students, mainly to review with them any arguments required in the prerequisites but not known by the students.
  • Interaction with the teacher is done through interviews (on fixed office hours or by appointment) and by e-mail.
  • On the web page of the course, the slides presented in each lesson are published progressively, with references to corresponding topics in the textbooks. The texts of the exercises proposed for the exercises are also published.
  • The teaching material and some examples of exam texts are accessible on the course's elearning site.
  • The course provides two intermediate tests, the passing of which exempts the student from the written exam.
Programma (contenuti dell'insegnamento)
  1. Introduction. Abstract machines, interpretation and compilation
  2. Lexical analysis, Implementing critical parts of a scanner
  3. From DFAs to regular expressions and backwards
  4. Parsing
  5. Syntax-Directed Translation
  6. Intermediate Code Generation
  7. Code generation
  8. Optimization and Data-Flow analysis
  9. Programming languages and abstraction: names, bindings and scopes
  10. Type systems
  11. Functional programming languages
  12. Type classes and monads in Haskell
  13. Java 8 extensions
Syllabus
  1. Introduction. Abstract machines, interpretation and compilation
  2. Lexical analysis, Implementing critical parts of a scanner
  3. From DFAs to regular expressions and backwards
  4. Parsing
  5. Syntax-Directed Translation
  6. Intermediate Code Generation
  7. Code generation
  8. Optimization and Data-Flow analysis
  9. Programming languages and abstraction: names, bindings and scopes
  10. Type systems
  11. Functional programming languages
  12. Type classes and monads in Haskell
  13. Java 8 extensions
Bibliografia e materiale didattico

Slides presented during the lectures and selected chapters of the following books:

  • Compilers: Principles, Techniques, and Tools by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman
  • Programming Language Pragmatics by Michael L. Scott,
  • Programming Languages: Principles and Paradigms by Maurizio Gabbrielli and Simone Martini
  • Concepts in Programming Languages by John C. Mitchell
Bibliography

Slides presented during the lectures and selected chapters of the following books:

  • Compilers: Principles, Techniques, and Tools by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman
  • Programming Language Pragmatics by Michael L. Scott,
  • Programming Languages: Principles and Paradigms by Maurizio Gabbrielli and Simone Martini
  • Concepts in Programming Languages by John C. Mitchell
Indicazioni per non frequentanti

Gli studenti non frequentanti possono trovare sulla pagina web del corso l'elenco degli argomenti presentati per ogni singola lezione, con le slide proiettate e i riferimenti al materiale didattico rilevante. Le modalita' d'esame per gli studenti non frequentanti sono identiche a quelle per gli studenti frequentanti.

Non-attending students info

Non-attending students can find on the course web page the list of topics presented for each lesson, with the projected slides and references to the relevant teaching material. Examination methods for non-attending students are identical to those for attending students.

Modalità d'esame

L'esame è composto da una prova scritta ed una prova orale. Il superamento di due prove in itinere equivale al superamento della prova scritta.
La prova scritta consiste in piú problemi da risolvere in circa due ore. Se superata, la prova rimane valida per tutti gli appelli della sessione di esami in corso.
La prova orale consiste in un colloquio tra il candidato e il docente, della durata di circa un'ora.

Assessment methods

The exam consists of a written test and an oral exam. Passing the two mid-term exams is equivalent to passing the written test.
The written test consists of a few problems to be solved in about two hours. If passed, the test remains valid for the ongoing exam session.
The oral test consists of an interview between the candidate and the lecturer, which lasts approximately one hour.

Updated: 06/08/2017 19:25