Prerequisiti
- Architettura degli elaboratori
- Programmazione
- Conoscenza del linguaggio C
Modalità d’esame
E’ necessario prenotarsi all’esame di laboratorio, utilizzando il sistema di prenotazione ESSE3.
Per i frequentanti che hanno passato l’esonero (c’è tempo fino all’appello di settembre per sostenere la prova orale):
- Svolgere le due assegnazioni di laboratorio (vedi sotto) da discutere durante la prova orale.
- Durante la prova orale non sono previste domande sulla parte frontale, a meno che durante la discussione non sia dia evidenza di non aver compreso qualcosa.
Per non frequentanti / non esonerati:
- Prova scritta con domande chiuse e aperte su tutto il programma (sia parte frontale sia laboratorio) – non è consentito svolgere prova scritta e orale in due appelli separati.
- Svolgere le due assegnazioni di laboratorio (vedi sotto) da discutere durante la prova orale.
- Prova orale con discussione della prova scritta e delle assegnazioni.
Programma del corso
- Parte frontale: Linguaggi di programmazione e compilatori
- Macchine astratte
- La nozione di macchina astratta e interprete
- Implementazione di un linguaggio
- Gerarchia di macchine astratte
- L’evoluzione dei linguaggi di programmazione
- Descrivere un linguaggio di programmazione
- Livelli di descrizione
- Grammatica e sintassi
- Grammatiche libere
- Vincoli sintattici e contestuali
- Compilatori
- Semantica
- Pragmatica
- Implementazione
- Analisi lessicale: i linguaggi regolari
- Analissi lessicale
- Espressioni regolari
- Automi finiti non deterministici (NFA) e deterministici (DFA) e loro equivalenza
- Da espressioni regolari ad automi finiti
- Automi finiti e grammatiche
- Minimizzazione di DFA (cenni)
- Pumping Lemma
- Analisi sintattica: linguaggi liberi
- Linguaggi liberi da contesto
- Automa a pila (PDA) (cenni)
- PDA deterministici
- Pumping Lemma per linguaggi liberi (cenni)
- Analizzatori sintattici Top-down e Bottom-up
- Forma normale di Chomsky per le grammatiche libere
- Laboratorio: assegnazioni (da presentare alla prova orale)
- Realizzazione di programma C per la lettura di grammatiche
- Realizzazione di un automa a stati finiti (DFA) in C
Dispense
- Frontale
- Introduzione al corso
- Evoluzione dei linguaggi
- Macchina astratta
- Descrivere un linguaggio di programmazione
- Analisi lessicale e linguaggi regolari
- Analisi sintattica e linguaggi liberi
- Laboratorio
- Introduzione a CUnit, Funzioni & Procedure in C
- Template file CUnit
- Modularizzazione e stile in C
- Strutturazione progetti Eclipse con librerie statiche
- Documentazione automatica del codice – Doxygen
- Puntatori e passaggio per riferimento
- Vettori, stringhe e matrici
- Strutture
- File
- Ricorsione
Esercitazioni
Software utilizzato in laboratorio
- Eclipse CDT
- CUnit test framework
- Eclipse Java
- JUnit test framework
Testo adottato
- Maurizio Gabbrielli, Simone Martini, Linguaggi di Programmazione, Principi e paradigmi. 2/e, McGraw-Hill.
Approfondimenti
- BW Kernighan, DM Ritchie, Il linguaggio C. Principi di programmazione e manuale di riferimento (2a ed), Pearson Education Italia, 2004.
- Kim N. King, Programmazione in C, Apogeo, 2009.