72671 - COMPLEMENTI DI LINGUAGGI DI PROGRAMMAZIONE

Anno Accademico 2022/2023

  • Docente: Cosimo Laneve
  • Crediti formativi: 6
  • SSD: INF/01
  • Lingua di insegnamento: Italiano
  • Modalità didattica: Convenzionale - Lezioni in presenza
  • Campus: Bologna
  • Corso: Laurea Magistrale in Informatica (cod. 5898)

Conoscenze e abilità da conseguire

Al giorno d'oggi lo sviluppo di software richiede strumenti veloci e sofisticati per la trasformazione e l'analisi. Ad esempio, il codice Java viene verificato dalla Virtual Machine prima di eseguirlo per controllare alcune proprietà di base sull'uso della memoria e dei lock. Facebook, prima del rilascio, verifica le proprie app attraverso un analizzatore statico che esclude l'assenza di bug senza alcuna esecuzione del codice. Le stesse applicazioni performance-critical e per l'asset-management sarebbero impossibili da costruire e far evolvere senza compilatori in grado di ottenere codice macchina ottimizzato e corretto a partire da codice di alto livello. L'obiettivo del corso è di presentare le moderne tecniche di trasformazione e analisi del codice e di mostrarne la loro realizzazione. Per questo motivo il corso farà riferimento a un framework, ANTLR, ampiamente utilizzato sia nel mondo accademico che in quello industriale per implementare linguaggi, strumenti e framework di ogni sorta. Ad esempio, Twitter search usa ANTLR per il parsing delle query, processando oltre 2 miliardi di query al giorno. Al termine dell'attività formativa lo studente conosce i fondamenti della trasformazione e analisi statica del codice. Sarà in grado di applicare la teoria estendendo un linguaggio piccolo, ma espressivo, per mezzo del framework ANTLR.

Contenuti

Introduzione alla trasformazione di codice ed analisi. Il framework ANTLR e la sua analisi lessicale e sintattica. Analisi Semantica: la tabella dei simboli, il type checking, la verifica statica di proprietà come risorse utilizzate o asset consumati. Generazione di codice intermedio per primitive standard e avanzate di linguaggi di programmazione. Macchine virtuali e interpreti.

Testi/Bibliografia

  • Torben Morgensen: Basics of Compiler Design. 2010.

  • Terence Parr: Language Implementation Patterns. 2010
  • material on the e-learning website

Metodi didattici

Lezioni frontali, laboratorio.

Modalità di verifica e valutazione dell'apprendimento

L’esame verificherà che lo studente abbia acquisito competenze
di compilazione e interpretazione, in particolare la capacità di risolvere problemi di compilazione. L'esame include anche lo sviluppo di un progetto.

Strumenti a supporto della didattica

Proiettore, lavagna, computer, laboratorio.

Orario di ricevimento

Consulta il sito web di Cosimo Laneve