81609 - LINGUAGGI, COMPILATORI E MODELLI COMPUTAZIONALI

Scheda insegnamento

Anno Accademico 2018/2019

Conoscenze e abilità da conseguire

Al termine del corso lo studente conosce: - gli aspetti fondamentali riguardanti la logica, gli automi, le espressioni regolari e le grammatiche - le tecniche di progettazione ed implementazione, tramite compilatori, dei linguaggi di programmazione - linguaggi, modelli e tecniche per la descrizione e verifica di proprietà dei sistemi software concorrenti e distribuiti.

Contenuti

Automi e linguaggi formali:
- automi a stati finiti
- espressioni regolari e loro relazione con gli automi a stati finiti
- grammatiche libere dal contesto
- automi a pila e loro relazione con le grammatiche libere dal contesto
- macchine di Turing
- linguaggi ricorsivi e ricorsivamente enumerabili e loro relazione con le macchine di Turing

Logica di base:
- logica proposizionale 
- logica dei predicati

Compilatori:
- analizzatori lessicali
- analizzatori sintattici e traduzione guidata dalla sintassi
- controlli statici di programmi
- generazione di codice

Modelli computazionali:
- sistemi di transizione per la modellazione del comportamento dei sistemi
- logiche temporali per la specifica e verifica di proprietà dei sistemi
- processi concorrenti a stati finiti con sincronizzazione e interleaving
- reti di Petri

Testi/Bibliografia

Hopcroft, Motwani, Ullman. "Automi, Linguaggi e Calcolabilità", terza edizione. Addison-Wesley, 2009.

Aho, Lam, Sethi, Ullman. "Compilatori: principi, tecniche e strumenti", seconda edizione. Addison-Wesley, 2009.

Huth, Ryan. "Logic in Computer Science: Modelling and Reasoning about Systems", second edition. Cambridge University Press, 2004.

Metodi didattici

Modifica Metodi didattici Lezioni frontali con lavagna/PC/proiettore e esperienze in laboratorio.

Modifica 
Lezioni frontali con lavagna/PC/proiettore e esperienze in laboratorio.     

Modalità di verifica dell'apprendimento

La verifica finale prevede un esame scritto con due tipi di domande:
- domande aventi lo scopo di verificare l'acquisizione delle competenze teoriche del corso;
- esercizi aventi lo scopo di verificare la capacità di applicazione dei concetti teorici su semplici casi di studio.
Una prova progettuale addizionale permette la verifica delle abilità relative all'implementazione dei linguaggi di programmazione.

Strumenti a supporto della didattica

Lavagna, PC, videoproiettore, laboratorio informatico.

Orario di ricevimento

Consulta il sito web di Mario Bravetti