COMPILATORI
cod. 1000637

Anno accademico 2009/10
2° anno di corso - Primo semestre
Docente
Settore scientifico disciplinare
Informatica (INF/01)
Field
Discipline informatiche
Tipologia attività formativa
Caratterizzante
48 ore
di attività frontali
6 crediti
sede:
insegnamento
in - - -

Obiettivi formativi

Nello studio del processo di compilazione di un linguaggio di programmazione si affrontano problemi di analisi, progetto ed implementazione la cui soluzione è spesso paradigmatica per problematiche che ricorrono frequentemente nello sviluppo di sistemi software di una certa complessità.<br />
Il corso si prefigge di fornire un'introduzione complessiva agli argomenti caratteristici della materia, con l'approfondimento di alcuni aspetti ritenuti significativi.

Prerequisiti

E` necessario avere dimestichezza con gli argomenti trattati nei corsi di Fondamenti di Programmazione, Algoritmi e Strutture Dati, Fondamenti dell'Informatica, nonché almeno uno tra Metodologie di Programmazione o Linguaggi Dichiarativi. E` consigliato avere seguito il corso di Linguaggi di Programmazione.

Contenuti dell'insegnamento

<br />
<ul>
<li><u>Introduzione al corso</u>.<br />
Macchine astratte, interpreti e compilatori. <br />
Suddivisione del compilatore in front-end, middle-end e back-end. <br />
Strutture di supporto alla compilazione ed all'esecuzione. </li>
</ul>
<ul>
<li><u>Il front-end</u>.<br />
Analisi lessicale: automi, espressioni regolari e scanner. <br />
Analisi sintattica: grammatiche libere da contesto e parser. <br />
Analisi dipendente dal contesto: i controlli di semantica statica. </li>
</ul>
<ul>
<li><u>Strutture di supporto alla compilazione</u>.<br />
Tabelle dei simboli e schemi di allocazione della memoria.<br />
Astrazione procedurale: frame di attivazione e convenzioni di chiamata.<br />
Generazione del codice intermedio: tipologie e schemi di traduzione. </li>
</ul>
<ul>
<li><u>Il back-end</u>.<br />
Selezione e schedulazione di istruzioni macchina.<br />
Allocazione dei registri. </li>
</ul>
<ul>
<li><u>Il middle-end</u>.<br />
Introduzione ai problemi di ottimizzazione del codice.<br />
Analisi data-flow e control-flow.<br />
Alcuni esempi di ottimizzazione.</li>
</ul>

Programma esteso

- - -

Bibliografia

Engineering a Compiler<br />
Keith D. Cooper and Linda Torczon<br />
Morgan Kaufmann, 2003.<br />
<br />
In alternativa:<br />
<br />
Compilers: Principles, Techniques and Tools (2nd edition)<br />
Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman and Monica S. Lam<br />
Pearson Education, 2006.

Metodi didattici

L'esame consiste nello svolgimento di un progetto individuale, nel contesto del quale lo studente dovrà affrontare uno degli argomenti introdotti e discussi durante le lezioni, approfondendo la conoscenza delle problematiche connesse e predisponendo una soluzione per lo specifico contesto applicativo di interesse.

Modalità verifica apprendimento

- - -

Altre informazioni

- - -