Corso "Introduzione ai compilatori"
Corso di laurea in Informatica
Università di Napoli
Docente Silvio Imbò (silim@libero.it)
Trasparenze presentate al 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).
[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
Per l'uso di YACC e LEX far riferimento ai lucidi presentati al corso ed alla manualistica.
Trasparenze presentate al corso
Esercitazioni di laboratorio (con soluzioni)
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.
10/01/2008, aula E4 ore 10
31/01/2008, aula E4 ore 10
19/02/2008, aula E4 ore 10
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