Corso "Introduzione ai compilatori"

Corso di laurea in Informatica

Università di Napoli

Docente Silvio Imbò (silim@libero.it)

Obiettivi del Corso

Testi

Programma

Trasparenze presentate al corso

Esercitazioni di laboratorio

Modalità svolgimento esame

Date esami

Contatti col docente

Obiettivi del corso

Il corso mira a divulgare le tecniche e le metodologie che stanno alla base della costruzione dei compilatori ma che trovano applicazione anche in altri contesti (traduzioni di linguaggi, parser, elaborazione tesi). Il corso si prefigge anche di trasmettere la conoscenza dei più importanti strumenti di generazione automatica di parser (YACC, LEX).

Testi

[ASU] A. Aho, R. Sethi, J. D. Ullman, Compilers. Principles, Techniques, and Tools, Addison Wesley, 1986

[CR] S. Crespi Reghizzi Sintassi semantica e tecniche di compilazione - volume primo metodi sintattici

Programma

  1. Introduzione [Cap. 1 - ASU].
  2. Richiami su linguaggi formali, grammatiche ed automi finiti [Cap. 1 par 1.1, 1.21.3 (escluso 1.3.6) – CR].
  3. Analisi Lessicale - Pumping lemma per linguaggi regolari. Passaggi da espressioni regolari a automi finiti non deterministici, ad automi finiti deterministici, ad automi minimi. LEX - [Cap. 3 - ASU] - Richiami su automi finiti [Cap. 2 Par. 2.2 - CR].
  4. Analisi sintattica - Processi di analisi discendenti: analisi a discesa ricorsiva, analisi LL. Processi di analisi risalenti: analisi LR, SLR, LALR - casi d’uso, trattamento degli errori - YACC – [Cap. 4 tranne 4.6, escluse pagine 238-249, 251-254 ASU]. Richiami su automi a pila [Cap. 2 par 2.3, 2.4, 2.5, 2.6, 2.7.1 – CR].
  5. Analisi semantica - Grammatiche ad attributi. Attributi sintetizzati ed ereditati. Traduzione con azioni semantiche [Cap. 5 esclusi 5.7, 5.8, 5.9, 5.10 – ASU].
  6. Controllo sulla correttezza dei tipi [Cap. 6 esclusi 6.5, 6.6, 6.7 – ASU]
  7. Ambienti di esecuzione [Cap. 7 (cenni) esclusi 7.4,7.7,7.8,7.9 – ASU]
  8. Generazione Codice intermedio. AST, three address code - [Cap. 8 - ASU]
  9. Generazione codice finale - Selezione delle istruzioni. Allocazione dei registri. [Cap. 9, par. 9.1, 9.2, 9.4 (Escluso: transformation of basic blocks ) 9.6, 9.7, 9.8 9.10 (fino a pag565, esempio 9.13 incluso) – ASU]

Per l'uso di YACC e LEX far riferimento ai lucidi presentati al corso ed alla manualistica.

Trasparenze presentate al corso

L1_introduzione corso.pdf

L2_analisi lessicale.pdf

L3_analisi sintattica.pdf

L4_analisi semantica.pdf

L5_ambiente di esecuzione.pdf

L6_generazione codice.pdf

L7_XML.pdf

Esercitazioni di laboratorio (con soluzioni)

eserc1.zip Analisi lessicale

eserc2.zip Analisi sintattica

eserc3.zip Analisi semantica

Modalità di svolgimento esame

Per sostenere l’esame è necessario far pervenire al docente (via posta elettronica silim@libero.it) un progetto applicativo sugli argomenti presentati al corso.

Si propongono i seguenti temi:

1) Realizzazioni di un traduttore tra due linguaggi di programmazione, uno sorgente (da tradurre) e l’altro obiettivo (tradotto); per esempio: C - Pascal, ASP-JSP. Bisogna indicare con chiarezza eventuali limitazioni adottate, e includere in commenti del linguaggio obbiettivo i costrutti del linguaggio sorgente non traducibili (v. nota esplicativa).

2) Realizzazione di un compilatore per un sotto-insieme di un linguaggio noto (C, pascal, ecc). Il compilatore deve essere in grado di compilare le espressioni del linguaggio, le istruzioni tipo "if … then … else", e le istruzioni di input/output da file e/o tastiera. Il linguaggio target può essere assembly, ed è possibile far uso di un assemblatore; in alternativa č possibile limitarsi alla produzione delle istruzioni in "three address code" del linguaggio sorgente in linguaggio C o Pascal.

3) Realizzazione di un interprete LISP semplificato utilizzando un parser "top-down" (a discesa ricorsiva o con automa a pila con parsing table). Le istruzioni da realizzare sono: CONS, CAR - CDR con le varianti (CAAR, CADAR, ecc.), QUOTE, le espressioni logiche, SETQ (assegnazione), ATOM, COND (istruzione condizionale), APPEND (concatenazione tra liste) (v. nota esplicativa - Interprete Lisp DOS).

4) Realizzazione di un traduttore SQL XML-SQL. Si puo' far riferimento alla DTD riportata in nota (v. nota esplicativa).

5) Realizzazione di un generatore di sistemi FUZZY. Il generatore prende in input un sistema fuzzy (descritto in un linguaggio opportuno), e produce come output un programma C (o C++,Java) in grado di svolgere le inferenze fuzzy del sistema (v. nota esplicativa).

Il progetto deve essere accompagnato da una breve nota che ne spiega il funzionamento.

E’ possibile concordare altri temi di esame.

Date esami AA 2007/2008

10/01/2008, aula E4 ore 10

31/01/2008, aula E4 ore 10

19/02/2008, aula E4 ore 10

Contatti col docente

Per qualsiasi informazione sul corso, sugli esami, per appuntamenti, contattare il docente per telefono al numero:

Tel 081-5639111

oppure all'indirizzo di posta elettronica: silim@libero.it