- 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)
-
dal 23/02/2024 al 17/05/2024
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