72940 - LINGUAGGI E MODELLI COMPUTAZIONALI M

Scheda insegnamento

Anno Accademico 2019/2020

Conoscenze e abilità da conseguire

Introduzione al rapporto fra linguaggi e progettazione a livello algoritmico e sistemistico. Metodi per la definizione della sintassi e della semantica dei linguaggi di programmazione e di specifica e analisi dei relativi modelli computazionali. Tecniche di riconoscimento e valutazione.

Programma/Contenuti

Il corso discute sotto diverse angolazioni il rapporto fra i linguaggi di programmazione, le relative tecniche di riconoscimento e interpretazione e i corrispondenti modelli computazionali, unendo una solida base teorica a una forte componente di sperimentazione pratica.

La prima parte del corso presenta i concetti fondamentali e le metodologie per la definizione della sintassi e della semantica dei linguaggi di programmazione, discute le relative tecniche di riconoscimento, interpretazione e valutazione e ne mostra l'applicazione pratica in casi concreti discussi sistematicamente.

La seconda parte del corso si focalizza invece sui modelli computazionali, secondo un approccio multi-paradigma e multi-linguaggio.

Principali contenuti:

  • Computabilità e Macchine di Turing (5h)
  • Descrizione formale dei linguaggi: grammatiche formali e loro proprietà, classificazione di Chomsky. Relazione fra tipi di grammatiche e automi riconoscitori. Analisi lessicale e tecniche di analisi sintattica top-down e bottom-up per linguaggi regolari e context-free. Cenni sulla descrizione formale della semantica. (18h)
  • Organizzazione e costruzione di interpreti e compilatori e relativi supporti a tempo di esecuzione:  architettura ed esempi concreti in Java. Strumenti per la generazione di analizzatori lessicali e sintattici. (14h)
  • Cenni ad approcci Model-Driven: il caso Xtext (3h)
  • Processi computazionali iterativi e ricorsivi, concetti base della programmazione funzionale, modelli per la valutazione di funzioni, basi di Lambda calcolo. (9h)
  • Javascript come linguaggio dinamico, funzionale a oggetti basato su prototipi (6h)
  • Scala e Kotlin come esempi di linguaggi blended basato su un approccio multi-paradigma e interoperabile con Java. (9h)

Testi/Bibliografia

Un elenco aggiornato  di testi di riferimento e manuali è consultabile sia sul sito Web, sia sulle diapositive.

Metodi didattici

Il corso viene erogato mediante proiezione in aula, di diapositive Powerpoint (delle quali lo studente può liberamente scaricare gli stampati prima delle lezioni). Lezioni ed esercitazioni sono continuamente intercalate, alternando l'esposizione di un concetto o costrutto linguistico con i relativi esempi, di cui viene immediatamente mostrato l'uso. Ulteriori approfondimenti ed esercizi sono svolti direttamente in aula. Sono inoltre proposti continuamente spunti per esercitazioni autonome di laboratorio, fortemente consigliate per la preparazione.

Modalità di verifica dell'apprendimento

La prova d'esame consiste in un colloquio orale; se  lo studente ha inserito nel piano di studi anche l'Attività Progettuale corrispondente,  durante il colloquio potrà essere discusso anche  il progetto svolto. E' comunque possibile sostenere i due colloqui separatamente.

Strumenti a supporto della didattica

Sono disponibili sul sito Web del corso copia delle diapositive proiettate e discusse a lezione a cura del docente, nonché alcune dispense integrative; un elenco esaustivo di testi di riferimento e manuali è consultabile sia sul sito Web, sia sulle diapositive.  Il sito fornisce inoltre suggerimenti per ulteriori esercizi e approfondimenti.

Link ad altre eventuali informazioni

http://enricodenti.disi.unibo.it

Orario di ricevimento

Consulta il sito web di Enrico Denti