Linguaggi di Programmazione: Compilatori



        Docente: Cosimo Laneve

Obiettivi Formativi

Il corso ha lo scopo di illustrare i principali metodi e strumenti teorici alla base della costruzione di compilatori. Questo corso ha come prerequisito il corso di Informatica Teorica. Il corso di Linguaggi di Programmazione attribuisce 12 crediti formativi ed ha durata di 80 ore, di cui 55 di lezioni frontali e 25 di esercitazione. L'esame consiste in una prova scritta ed un progetto di gruppo (max 3 studenti). Il progetto consiste nel realizzare un front-end di un compilatore per un linguaggio di programmazione (da concordare col docente) che produce codice intermedio in SPIM.


Programma del corso

Fondamenti di Compilazione.

Analisi lessicale: automi a stati finiti, espressioni regolari, Flex

Analisi sintattica: parsing LL, parsing LR, automi a pila, Bison

Analisi semantica: Grammatiche con attributi, attributi ereditati e sintetizzati, alberi sintattici astratti, dags, tipi, tabella dei simboli, type-checking, equivalenza di tipi, coercions e overloadings, type-checking di funzioni polimorfe, unificazione

Ambienti al tempo di esecuzione: struttura della memoria, pila e heap, accesso ai dati globali, catene statiche e dinamiche, i display, il passaggio dei parametri, tecniche di gestione dello heap, frammentazione, garbage-collection, tecnica di reference-count e di marking

Traduzione in codice intermedio: codice a tre indirizzi, traduzione dei costrutti sintattici, backpatching


Lezioni on-line (conviene scaricarle ed aprirle con Acrobat Reader)

Lezione 1 ; Lezione 2 ; Lezione 3 ; Lezione 4 ; Lezione 5 ; Lezione 6 ; Lezione 7 . Lezione 8 .


Testi Consigliati

tiger Modern Compiler Implementation in C
Andrew W. Appel, Maia Ginsburg
Hardcover - 560 pages (January 1998)
Cambridge University Press
ISBN: 052158390X
dragon Compilers: Principles, Techniques, and Tools
Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman
Addison-Wesley Pub Co
ISBN: 0201100886



Puntatori ad altri corsi

Didier Remy: La Compilation

Martin Odersky: Compilation

Michael I. Schwartzbach: Compiler Construction

Joseph Bergin: Compiler Construction

Seth Copen Goldstein: Compiler Design

Nicoletta Cocco: Linguaggi e Compilatorl


Tools

Lex - A Lexical Analyzer Generator, M. E. Lesk and E. Schmidt


Yacc: Yet Another Compiler-Compiler, Stephen C. Johnson


Flex, A fast scanner generator, Vern Paxson


Bison, The YACC-compatible Parser Generator, Charles Donnelly and Richard Stallman


SPIM, A MIPS R2000/R3000 Simulator, James Larus