Linguaggi e compilatori (2015/2016)

Codice insegnamento
4S02726
Crediti
12
Coordinatore
Roberto Giacobazzi
L'insegnamento è organizzato come segue:
Modulo Crediti Settore disciplinare Periodo Docenti
COMPILATORI 6 INF/01-INFORMATICA II semestre Alessandra Di Pierro
LINGUAGGI 6 INF/01-INFORMATICA I semestre Roberto Giacobazzi

Obiettivi formativi

------------------------
MM: COMPILATORI
------------------------
Il corso introduce gli elementi di base della teoria della compilazione dei linguaggi di programmazione. L'obiettivo e' fornire agli studenti le competenze necessarie per lo sviluppo e l'implementazione di compilatori per linguaggi semplici, le capacita' per poter usare semplici strumenti per l'analisi sintattica e lessicale e la conoscenza delle nozioni teoriche alla base delle varie fasi del processo di compilazione.
------------------------
MM: LINGUAGGI
------------------------
Il corso introduce i concetti fondamentali dei linguaggi di programmazione, quali funzioni, tipi, gestione della memoria, e controllo. L’obiettivo è dare agli studenti una comprensione approfondita dei problemi che si incontrano nella progettazione dei linguaggi di programmazione. Questa comprensione permette agli studenti di cogliere vantaggi e svantaggi dei linguaggi che usano, in modo da saper valutare la scelta del linguaggio di programmazione piu' appropriato rispetto all’applicazione che si vuole realizzare.

Programma

------------------------
MM: COMPILATORI
------------------------
Introduzione al corso e alla tecnologia dei compilatori. Analisi lessicale. Analisi sintattica e classi di linguaggi. Sintassi astratta. Analisi semantica (type-checking). Codice intermedio. Generazione del codice intermedio. Generazione del codice macchina.
------------------------
MM: LINGUAGGI
------------------------
Funzioni. Macchine virtuali: interpreti e compilatori. Descrizione di un linguaggio di programmazione: sintassi: grammatiche non contestuali. Semantica operazionale strutturata. Gestione della memoria: regole di visibilità, funzioni e procedure, passaggio di parametri, stack record di attivazione, heap. Controllo: strutturazione ed astrazione, eccezioni. Dati e tipi: tipi di dato, tipi di base e composti, sistema dei tipi, inferenza di tipo e polimorfismo, garbage collection. Esempi di paradigmi di programmazione.

Modalità d'esame

------------------------
MM: COMPILATORI
------------------------
L'esame consiste in un progetto realizzato in gruppi e una discussione individuale
------------------------
MM: LINGUAGGI
------------------------
Esame scritto con orale facoltativo (che diventa obbligatorio per ottenere/confermare un voto allo scritto maggiore di 26/30).

Testi di riferimento
Autore Titolo Casa editrice Anno ISBN Note
Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman Compilers: Principles, Techniques, and Tools (2nd Edition) Pearson 2007 9780321486813
Torben Aegidius Mogensen Introduction to Compiler Design Springer 2011 978-0857298287
Maurizio Gabbrielli, Simone Martini Linguaggi di programmazione: principi e paradigmi (Edizione 2) McGraw Hill 2011 88-386-626
T.W. Pratt e M.V. Zelkowitz Programming languages: Design and implementation (Edizione 3) Prentice Hall 1999