elenco    
        corso    

Principi dei linguaggi di Programmazione

Codice: 379AACrediti: 12Semestre: 1-2Sigla: PLP 
 
Settore disciplinare: INF/01 - Informatica

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   bellia@di.unipi.it  Home Page di Marco Bellia  Stanza 330  Tel. 0502212781

Prerequisiti

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.

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: 36Ore 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.


Ulteriore pagina web del corso: http://www.di.unipi.it/~bellia


Paradigmi di programmazione

Docente

Marco Bellia   bellia@di.unipi.it  Home Page di Marco Bellia  Stanza 330  Tel. 0502212781

Prerequisiti

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. 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: 36Ore 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]


home


email