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
  1. Macchine astratte
    1. La nozione di macchina astratta e interprete
    2. Implementazione di un linguaggio
    3. Gerarchia di macchine astratte
    4. L’evoluzione dei linguaggi di programmazione
  2. Descrivere un linguaggio di programmazione
    1. Livelli di descrizione
    2. Grammatica e sintassi
    3. Grammatiche libere
    4. Vincoli sintattici e contestuali
    5. Compilatori
    6. Semantica
    7. Pragmatica
    8. Implementazione
  3. Analisi lessicale: i linguaggi regolari
    1. Analissi lessicale
    2. Espressioni regolari
    3. Automi finiti non deterministici (NFA) e deterministici (DFA) e loro equivalenza
    4. Da espressioni regolari ad automi finiti
    5. Automi finiti e grammatiche
    6. Minimizzazione di DFA (cenni)
    7. Pumping Lemma
  4. Analisi sintattica: linguaggi liberi
    1. Linguaggi liberi da contesto
    2. Automa a pila (PDA) (cenni)
    3. PDA deterministici
    4. Pumping Lemma per linguaggi liberi (cenni)
    5. Analizzatori sintattici Top-down e Bottom-up
    6. Forma normale di Chomsky per le grammatiche libere
  • Laboratorio: assegnazioni (da presentare alla prova orale)
  1. Realizzazione di programma C per la lettura di grammatiche
  2. Realizzazione di un automa a stati finiti (DFA) in C

Dispense

  • Frontale
  1. Introduzione al corso
  2. Evoluzione dei linguaggi
  3. Macchina astratta
  4. Descrivere un linguaggio di programmazione
  5. Analisi lessicale e linguaggi regolari
  6. Analisi sintattica e linguaggi liberi
  • Laboratorio
  1. Introduzione a CUnit, Funzioni & Procedure in C
  2. Template file CUnit
  3. Modularizzazione e stile in C
  4. Strutturazione progetti Eclipse con librerie statiche
  5. Documentazione automatica del codice – Doxygen
  6. Puntatori e passaggio per riferimento
  7. Vettori, stringhe e matrici
  8. Strutture
  9. File
  10. 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.