Obiettivi Formativi
Gli studenti apprendono i principi fondamentali della sintassi e semantica dei linguaggi di programmazione e delle principali metodologie di parsing. L'obiettivo finale del corso è quello di fornire agli studenti le conoscenze e le competenze necessarie per l'implementazione di un semplice compilatore.
Prerequisiti
- Concetti di base sui linguaggi formali: grammatiche libere da contesto, automi a stati finiti;
- Introduzione agli algoritmi e strutture dati.
- Introduzione al processo di compilazione
- Analisi Lessicale
- Il ruolo dell'analisi lessicale. Token, pattern e lessemi
- Espressioni e definizioni regolari
- Automi a stati finiti deterministici e non-deterministici
- Algoritmo di Thompson; costruzione dei sottoinsiemi; algoritmo di minimizzazione
- Generatori automatici di analizzatori lessicali e algoritmo di pattern-matching
- Analisi Sintattica
- Il ruolo dell'analisi sintattica
- Grammatiche libere da contesto
- Parsing Top-Down: le funzioni FIRST e FOLLOW, tabelle di parsing e grammatiche LL(k)
- Parsing Bottom-Up: handle e handle pruning, parser shift-reduce, automi a pila, algoritmo di parsing LR
- Grammatiche SLR(1), LR(1) e LALR(1)
- Analisi Semantica (cenni)
- Il ruolo dell'analisi semantica
- Definizioni guidate dalla sintassi, attributi sintetizzati ed ereditati, grafo delle dipendenze e ordinamento topologico
- Definizioni S-Attributed e L-Attributed
- Una definizione guidata dalla sintassi per la costruzione di un sintax-tre
- Introduzione a JavaCC
- A.V. Aho, M.S. Lam, R.Sethi, J.D. Ullman. Compilers: Principles, Techniques and Tools. Pearson Education, Inc.
- W.A. Appel. Modern Compilers Implementation in Java. Cambridge University Press.
Le lezioni per l'A.A. 2009/10 si svolgono durante il II semestre in base al seguente orario
- Martedì, dalle 15:00 alle 17:00, aula AB2
- Giovedì dalle 09:00 alle 11:00, aula LA1
L'esame di Linguaggi di Programmazione e Compilatori consiste di una prova scritta e una prova orale
Prove scritte per l'A.A. 2010/2011
- 17 giugno 2010
- 15 luglio 2010
- 06 settembre 2010
- 27 settembre 2010
- 02 febbraio 2011
- 22 febbraio 2011