Obiettivi formativi: Scopo del corso è quello di introdurre i
concetti fondamentali che stanno alla base della progettazione ed
implementazione di un linguaggio di programmazione moderno. In
particolare si porrà l'attenzione sul ruolo centrale che hanno i tipi
e la semantica (operazionale e denotazionale) nella fase di
comprensione e progettazione di un linguaggio di programmazione, e di
come sia possibile derivare sistematicamente interpreti e macchine
astratte a partire da una corretta e ben formalizzata definizione del
linguaggio.
Propedeuticità consigliate: Il corso ha come prerequisiti i
corsi del I e II anno e la parte di linguaggi formali ed
automi del corso di Fondamenti dell'Informatica. Il corso è
propedeutico al corso di Compilatori.
Programma dettagliato
-
Interpreti e macchine astratte: interpretazione, compilazione, specializzazione
-
Definizioni induttive, sistemi di transizione, teoremi di punto fisso
-
Sintassi concreta, sintassi astratta, ambiente e memoria: i tipi di dato
-
Semantica denotazionale ed operazionale
-
Il linguaggio ML: specifica dell'interprete denotazionale ed operazionale
-
L'interprete per un linguaggio di programmazione: interprete denotazionale,
operazionale, iterativo.
-
La gestione degli ambienti: linguaggi a blocchi
-
L'interprete per un lunguaggio con funzioni e procedure
-
L'interprete per n linguaggio ad oggetti
-
Semantica statica e interpretazione: linguaggi fortemente tipati
-
Polimorfismo
Modalità d'esame
Realizzazione di un progetto implementativo su specifiche fornite dal docente.
Il progetto consiste nello sviluppo in OCAML di un interprete.
L'esame consiste nella discussione del progetto.
My
Home page