corso |
Codice: | 379AA | Crediti: | 12 | Semestre: | 1-2 | Sigla: | PLP | |
Settore disciplinare: | INF/01 - Informatica |
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 |
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.
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.
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 paradigma.
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 programming methodologies of the supported linguistic constructs. It focuses on the study of three paradigms,
the Object Oriented, the Functional, and the Logic Programming paradigms, and on their use in the various programming methodologies. The Programming methodologies considered in the course includes Decomposition Based, Fully Abstract Abstraction, Inductive Programming, Divide and Conquer, Functional Programming, Memoization, Tail Recursion, Polymorphic Programming, Higher Order Programming, Combinator Based, Deductive Programming, Object Oriented Programming
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.
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 |
Testo di Riferimento:
Appunti, Lucidi, Programmi disponibili alla pagina del corso
Gabrielli M., S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hill, Milano, 2006 [GM]
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]