Diario delle lezioni

  1. 8/3/10. Il disegno di legge Gelmini sull'università. Presentazione del corso. Le prime fasi della compilazione (front end).
  2. 10/3/10. Le fasi successive della compilazione (back end). Espressioni regolari. Automi finiti deterministici e non. Esercizi.
  3. 15/3/10. Conversione di espressioni regolari in epsilon-NFA, e di epsilon-NFA in DFA. Minimizzazione di un DFA. Osservazioni sulla generazione automatica di analizzatori lessicali.
  4. 17/3/10. Esercizi su espressioni regolari. Introduzione ad ANTLR come generatore di analizzatori lessicali.
  5. 22/3/10. Grammatiche context-free. Derivazioni ed alberi di derivazione. Grammatiche ambigue.
  6. 24/3/10. Algoritmi di parsing. Introduzione alle famiglie LL ed LR. Esercitazione con ANTLR. La tecnica del "panic mode" per la gestione degli errori lessicali.
  7. 12/4/10. Tassonomia degli algoritmi di parsing. L'algoritmo LL(k) e le sue implementazioni table-driven e recursive descent.
  8. 14/4/10. Ambiguità del cast nei linguaggi Java, C/C++ e C#. Generazione automatica di un parser LL(1). Le funzioni Eps, First, Follow e Predict.
  9. 16/4/10. (lezione straordinaria) Esercitazione: esercizi 2.11 e 2.12 dal libro di teoria.
  10. 19/4/10. Conflitti ed ambiguità. Limiti dell'algoritmo LL(k): grammatiche left-recursive. Introduzione all'algoritmo LL(*). L'Extended Backus-Naur Form (EBNF). Grammatiche per espressioni aritmetiche.
  11. 21/4/10. Codificare associatività e precedenza degli operatori aritmetici in una grammatica LL. Grammatiche non LL(*). Fattorizzazione. I predicati sintattici di ANTLR.
  12. 23/4/10. (lezione straordinaria) Esempi di uso dei predicati sintattici. Realizzare un interprete di espressioni aritmetiche. (fine della prima parte del corso)
  13. 3/5/10. Attributi ereditati e loro implementazione in ANTLR: parametri dei non-terminali.
  14. 5/5/10. Implementare la tabella dei simboli. Gli scope e la loro implementazione in ANTLR.
  15. 10/5/10. Gli scope globali in ANTLR. Rappresentare in Java il sistema dei tipi del C.
  16. 12/5/10. Trattamento degli errori sintattici in ANTLR. Rappresentare in Java il sistema dei tipi di Java. Introduzione al type checking: accesso agli array.
  17. 17/5/10. La compilazione separata, in C e in Java. Compilazione in due fasi. La prima fase: raccolta delle interfacce di classe.
  18. 19/5/10. Esercitazione: lexer per il linguaggio Ja. Alberi sintattici astratti.
  19. 24/5/10. Creare alberi sintattici astratti con ANTLR. Operatori "!" e "^". Regole di riscrittura.
  20. 26/5/10. Esercitazione: rappresentare in Java il sistema dei tipi Java.
  21. 31/5/10. Esercitazione.
  22. 4/6/10. Lezione di recupero. Grammatiche che riconoscono alberi. Realizzare un interprete per espressioni aritmetiche con variabili.
  23. 7/6/10. Esercitazione. Controlli a tempo di compilazione relativi all'overloading e all'overriding.
  24. 9/6/10. Esercitazione. Creazione di alberi sintattici per espressioni Java. (Ultima lezione)