| | | corso | | | | |
Principi dei linguaggi di Programmazione
Codice: | 379AA | Crediti: | 12 | Semestre: | 1-2 | Sigla: | PLP | |
|
Settore disciplinare: | INF/01 - Informatica |
Ultima versione disponibile: programma da confermare per l’a.a. 2012/2013
Obiettivi di apprendimento
Il corso si propone l'obiettivo di presentare i prinicipi e le tecniche per la realizzazione e l'uso di linguaggi di
programmazione. Il corso consiste di due moduli.
Moduli:
Tecniche di compilazione
Docente
Marco Bellia
Tel. 0502212781Prerequisiti
Programmazione di base, e nozioni di base dei linguaggi di programmazione: Sintassi, Semantica.
Obiettivi di apprendimento
Introdurre le principali problematiche inerenti la
realizzazione di traduttori e interpreti per linguaggi di
programmazione. Apprendere le tecniche di analisi sintattica e di
analisi statica. Introdurre le tecniche e gli strumenti per la
traduzione, generazione e interpretazione di codice.
Descrizione
Il corso considera le principali problematiche che si incontrano nella
costruzione di interpreti e di traduttori per linguaggi. A partire da
una formalizzazione di linguaggio consideriamo le strutture del lessico,
della sintassi, della semantica e parallelamente introduciamo tecniche
per definire, analizzare e costruire strumenti adatti ad operare con
tali strutture, quali scanners, parser lineari ad una passata,
generatori di codice.
English Description
Fundamentals of compilers and interpreters; symbol tables; lexical analysis, syntax analysis, semantic
analysis, code generation (, and optimizations) for general purpose programming languages.
Programma
Linguaggi:
sintassi, semantica, esecutore, funzione semantica, interprete e traduttore.
Compilatore:le
principali fasi, compilazione a una passata, front-end e back-end.
Lessico: linguaggi
regolari, analisi lessicale, automi a stati finiti e scanners. Lex
Sintassi: Linguaggi
context-free. Tecniche di analisi sintattica: forme sentenziali,
derivazioni leftmost, rightmost, alberi di d.s., ambiguità. Tecniche di
parsing: top-down e parser LL, bottom-up e
parser SLR, LALR e LR. YACC
Grammatiche ad attributi: attributi, a. ereditati, a.
sintetizzati, grammatiche s-attributate e l-attributate, analizzatori
discendenti e analizzatori ascendenti. Valutazione
bottom-up di attributi ereditati. Analisi di definizioni
syntax-directed.
Analisi statica: proprietà
statiche di programmi e analisi dei tipi
Generazione di codice intermedio: linguaggi interemedi,
Tecniche di generazione per attributi e per effetti laterali. Traduzioni
di espressioni senza effetti laterali e invarianti
di traduzione. Traduzioni di comandi e invarianti di raduzione.
Trasferimento
di controllo, salti in avanti e backpatching.
Ore lezione: | 36 | Ore esercitazione: | 12 | | | |
Bibliografia
testo di base:
Aho,A.V., Lam, M.S., Sethi, R. and J.D., Ullman, COMPILERS: Principles, Techniques,
and Tools - Second Edition. Addison-Wesley, 2007. - primi otto capitoli (pp.1-581)
materiale di approfondimento: http://www.di.unipi.it/~bellia
testi di consultazione:
Hopcroft, J.E., Motwani, R. and J.D. Ullman, Automi, Linguaggi e
Calcolabilità. Addison-Wesley, Pearson Education Italia srl., 2003
Crespi Reghizzi, S., Linguaggi Formali e Compilazione. Pitagora Editrice Bologna, 2006.
Paradigmi di programmazione
Docente
Marco Bellia
Tel. 0502212781Prerequisiti
Metodi per la definizione di Sintassi e Semantica di Linguaggi. Principi generali di struttura, tecniche di analisi e traduzione dei linguaggi. Programmazione in Caml, C/Java.
Obiettivi di apprendimento
Approfondire le conoscenze dei paradigmi di programmazione:
- della semantica dei costrutti (controllo e dati) pesenti nel paradigma;
- del supporto run-time della relativa macchina astratta;
- delle relative metodologie di sviluppo di programmi supportate dal raradigma.
Capacità.
Descrizione
Il corso parte dalla definizione di linguaggio e della sua macchina astratta per affrontare le principali tematiche sulla realizzazione dei componenti della macchina. L'analisi è sempre condotta correlando la struttura dei componenti ai meccanismi linguistici supportati e ai significativi vantaggi che questi meccanismi offrono alla metodologia di sviluppo di programmi del linguaggio. A partire da queste conoscenze, studiamo in modo sistematico le caratteristiche di tre paradigmi di programmazione: il paradigma orientato ad oggetti, il paradigma funzionale, il paradigma logico.
English Description
The course covers the main topics on the structure of programming languages from the viewpoints of the runtime support of its abstract machine and of the expressiveness of the supported linguistic constructs. It focuses on the study of three paradigms: Object Oriented, Functional, and Logic Programming paradigms. And on the use of them in the various programming methodologies.
Programma
Ambiente: identificatori, valori denotabili, scope statito e dinamico, struttura
Memoria: locazioni, valori memorizzabili, allocazione statica, dinamica, struttura (3h.)
Controllo di valutazione: stato, composizione e espressioni, sequenza e comandi, ricorsione e iterazione, astrazioni
Strutture di dati e tipi: sistema di tipi, equivalenza nominale e strutturale, polimorfismo, garbage collection, astrazioni (8h.)
Programmazione non strutturata: dove, quando, perchè? goto, break, continue, return e i meccanismi per il controllo delle eccezioni (4h.)
Il paradigma orientato ad oggetti: Principi, strutture principali, metodologie di programmazione, programmazione in Java. (7h.)
Il paradigma funzionale: Principi, strutture principali, metodologie di programmazione, programmazione in Haskell.
(7h.)
Il paradigma logico: Principi, strutture principali, metodologie di programmazione, programmazione in Prolog. (7h.)
Esercitazioni. Applicano queste conoscenze alla stesura di programmi nel paradigma più adatto e alla ristesura in un paradigma di un programma scritto per un paradigma differente.
Ore lezione: | 36 | Ore esercitazione: | 12 | | | |
Bibliografia
Testo di Riferimento:
Gabrielli M., S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hill, Milano, 2006 [GM]
Materiale Integrativo:
Appunti, Lucidi, Programmi disponibili alla pagina del corso
Testi di Consultazione
Turbak, F., Gifford, D., M.A. Sheldon, Design Concepts in Programming Languages, MIT Press, 2008 [TG]
D. Pratt T.W., M.V. Zelkowitz, Programming Languages: Design and Implementation, Prentice-Hall, Inc., Englewood Cliffs, New Jersey, 1996 [PZ]
Mitchell, J.C., Concepts in Programming Languages, Cambridge University Press, 2003 [MJ]
R. Sethi R., Programming Languages: Concepts and Constructs (snd edition), Addison-Wesley, Reading, Massachusetts, 1996 [SR]
Gabrielli M., S. Martini, Linguaggi di Programmazione: Principi e Paradigmi (seconda edizione), McGraw-Hill, Milano, 2011 [GM]