Università degli Studi di Urbino Carlo Bo / Portale Web di Ateneo


LINGUAGGI DI PROGRAMMAZIONE E COMPILATORI

A.A. CFU
2008/2009 12
Docente Email Ricevimento studentesse e studenti
Luca Padovani mercoledì 11:00-13:00

Assegnato al Corso di Studio

Giorno Orario Aula

Obiettivi Formativi

Il Corso ha l'obiettivo di introdurre i concetti di base relativi alla sintassi e alla semantica dei linguaggi di programmazione e le loro applicazioni allo sviluppo dei compilatori.

Programma

01. Introduzione alla compilazione:
01.01 Architettura e fasi di un compilatore.
01.02 Grammatiche a struttura di frase, linguaggi formali, classificazione di Chomsky.

02. Linguaggi regolari:
02.01 Automi a stati finiti deterministici.
02.02 Automi a stati finiti non deterministici.
02.03 Automi a stati finiti con ε-transizioni.
02.04 Grammatiche lineari destre.
02.05 Proprietà di chiusura dei linguaggi regolari.
02.06 Espressioni regolari.
02.07 Relazione tra espressioni regolari e automi a stati finiti.
02.08 Pumping lemma per linguaggi regolari.
02.09 Minimizzazione di automi a stati finiti.

03. Linguaggi liberi:
03.01 Grammatiche libere.
03.02 Alberi sintattici, ambiguità, disambiguazione.
03.03 Semplificazione delle grammatiche libere, forma normale di Chomsky.
03.04 Pumping theorem per linguaggi liberi, proprietà di chiusura dei linguaggi liberi.
03.05 Automi a pila non deterministici.
03.06 Relazione tra grammatiche libere e automi a pila non deterministici.

04. Programmazione funzionale in OCaml:
04.01 Introduzione al linguaggio OCaml: valutazione di espressioni, tipi di dato primitivi.
04.02 Funzioni.
04.03 Funzioni ricorsive.
04.04 Dichiarazioni locali e pattern matching.
04.05 Type inference e polimorfismo.
04.06 Funzioni di ordine superiore, currying.
04.07 Programmazione funzionale con side-effects: riferimenti, I/O, tabelle hash.
04.08 Definizione di tipi di dato: alias di tipo e tipi algebrici.
04.09 Programmazione funzionale con tipi algebrici.
04.10 Eccezioni.
04.11 Tipi astratti e sistema dei moduli.

05. Progetto di compilazione:
05.01 Analisi lessicale con ocamllex.
05.02 Analisi sintattica con ocamlyacc.
05.03 Progetto di compilazione: analisi, specifica, implementazione.

06. Analisi sintattica:
06.01 Parsing top-down, parser e grammatiche LL(1).
06.02 Parsing bottom-up.
06.03 Parser e grammatiche SLR.
06.04 Parser e grammatiche LR(1) e LALR(1).
06.05 Alberi attribuiti, alberi di sintassi astratta.

07. Analisi semantica:
07.01 Nomi, regole di scoping e gestione della tabella dei simboli.
07.02 Tipi di dato e type checking.

08. Generazione del codice:
08.01 Organizzazione della memoria e passaggio dei parametri.
08.02 Generazione del codice intermedio.
08.03 Compilazione di espressioni aritmetiche.
08.04 Compilazione di espressioni booleane.
08.05 Compilazione di comandi e costrutti di controllo.

09. Semantica operazionale:
09.01 Semantica operazionale naturale di un semplice linguaggio imperativo (While).
09.02 Semantica operazionale di While con procedure (scoping statico e dinamico).

10. Semantica denotazionale:
10.01 Semantica denotazionale di While.
10.02 Semantica denotazionale di While con procedure (call-by-value e call-by-reference).

11. Attività di laboratorio:
11.01 Esercizi di base su OCaml e funzioni non ricorsive.
11.02 Esercizi su funzioni ricorsive.
11.03 Esercizi sulle liste.
11.04 Esercizi su funzioni di ordine superiore.
11.05 Esercizi su tipi algebrici.
11.06 Generazione di analizzatori lessicali con ocamllex.
11.07 Generazione di analizzatori sintattici con ocamlyacc.
11.08 Esercizi sulla generazione di codice intermedio.

Eventuali Propedeuticità

Logica Matematica, Programmazione degli Elaboratori, Architettura degli Elaboratori, Algoritmi e Strutture Dati.

Modalità Didattiche, Obblighi, Testi di Studio e Modalità di Accertamento

Modalità didattiche

Lezioni frontali ed esercitazioni di laboratorio

Obblighi

Nessuno.

Testi di studio

Hopcroft, Motwani, Ullman, "Automi, Linguaggi e Calcolabilità", Addison-Wesley, 2003
(Hopcroft, Motwani, Ullman, "Introduction to Automata Theory, Languages, and Computation", Addison-Wesley, 2000)
(copre le sezioni 01.02, 02, 03 del programma).

Nielson, Nielson, "Semantics with Applications: An Appetizer", Springer, 2007
(copre le sezioni 09 e 10 del programma).

Aho, Lam, Sethi, Ullman, "Compilers: Principles, Techniques, and Tools", Addison-Wesley, 2007
(copre le sezioni 01.01, 06, 07 e 08 del programma).

Reade, "Elements of Functional Programming", Addison-Wesley, 1989.
Ullman, "Elements of ML Programming (ML97 edition)", 1997.
Leroy, "The Objective Caml System", 2002.
(coprono le sezioni 04, 05, 11 del programma).

Modalità di
accertamento

Prova scritta, progetto di laboratorio e prova orale

Disabilità e DSA

Le studentesse e gli studenti che hanno registrato la certificazione di disabilità o la certificazione di DSA presso l'Ufficio Inclusione e diritto allo studio, possono chiedere di utilizzare le mappe concettuali (per parole chiave) durante la prova di esame.

A tal fine, è necessario inviare le mappe, due settimane prima dell’appello di esame, alla o al docente del corso, che ne verificherà la coerenza con le indicazioni delle linee guida di ateneo e potrà chiederne la modifica.

Note

Il corso è erogato sia nel "percorso in presenza" che nel "percorso online" del Corso di Laurea di Informatica Applicata.

« torna indietro Ultimo aggiornamento: 14/07/2008


Il tuo feedback è importante

Raccontaci la tua esperienza e aiutaci a migliorare questa pagina.

Posta elettronica certificata

amministrazione@uniurb.legalmail.it

Social

Università degli Studi di Urbino Carlo Bo
Via Aurelio Saffi, 2 – 61029 Urbino PU – IT
Partita IVA 00448830414 – Codice Fiscale 82002850418
2024 © Tutti i diritti sono riservati

Top