Progetto

Laboratorio di Programmazione

Canale P-Z

Anno Accademico 2003-2004

Prof. Stefano Guerrini


COMPLETAMENTO DEL PROGETTO
Sostituzione e/o correzione moduli non funzionanti

Chi ha inviato versioni dei primi due moduli non funzionanti, può fornire delle versioni corrette dei propri moduli. La valutazione finale del laboratorio avverrà quindi dopo un breve orale in cui verranno analizzati i problemi corretti (il voto dipenderà ovviamente dal numero e dall'entità degli errori corretti).
Ovviamente, anche chi ha inviato versione funzionanti, può inviare delle versioni migliori se lo ritiene utile e/o necessario.

Chi non fosse in grado di correggere il proprio modulo potrà chiederne una versione funzionante al docente. In questo caso, per completare l'esame potrebbe essere necessaria una prova integrativa.

COMMENTO GENERALE SULLA SINTASSI DI CCINO

Alcune note aggiuntive sulla sintassi di CCINO sono state fraintese, in particolare quella sulle parentesi nelle espressioni (per questo è stato aggiunto un commento che chiarisce il punto della nota sulle parentesi alla seguente pagina). Di questa viene qui riportato il punto principale per quanto riguarda l'implementazione dell'analizzatore sintattico.

Non è un errore se, invece di sfruttare la semplificazione della sintassi di CCINO, si implementa un analizzatore che riconosce i programmi validi di CCINO più altri programmi C corretti - ad esempio, accentando le espressioni del C senza tutte le parentesi richieste dalla sintassi fornita nelle specifiche di CCINO. Occorre, però fare in modo che il tentativo di estendere la sintassi per renderla più vicina al C non comprometta il riconoscimento dei programmi corretti secondo la sintassi fornita nella specifica di CCINO, dato che questo sarebbe certamente un errore.

III e IV Modulo

Con quelle del III e IV modulo, le specifiche del progetto sono ora complete.

Verifica del IV Modulo

È disponibile il main per la verifica del IV modulo, ovvero per la verifica del progetto completo. Per maggiori dettagli si veda l'appendice alle specifiche del IV modulo.
Il main del IV modulo utilizza delle chiamate di sistema che lo rendono non immediatamente portabile su tutte le architetture/compilatori. La versione fornita funziona sotto Linux/gcc e, con una piccola modifica, sotto Windows/Visual C (anche il file per Windows/Visual C è disponibile).
Per eseguire una verifica della copilabilità, compilare il main insieme al seguente file di prova, nel quale le funzioni di parsing e di esecuzione leggono e stampano l'input linea per linea. La compilazione dovrebbe fornire un eseguibile che legge e stampa il file passato sulla linea di comando e poi si ferma in attesa di leggere delle linee dallo stdin sino al raggiungimento di eof (sotto Linux, eof si può immettere da tastiera digitando Ctrl-D, sotto Windows, digitando Ctrl-Z).
Chiunque dovesse incontrare problemi di compilazione è pregato di contattare il docente.


Consegna

III modulo: entro le 24.00 del 15/09
IV modulo: entro le 24.00 del 25/09

ESEMPI DI PROGRAMMI CCINO

Per compilare direttamente in C gli esempi di programmi CCINO:

    gcc -g -x c -include ccino-cc.h ccino-cc.c file.ccino -o file
Garantendo che i file ccino-cc.h e ccino-cc.c siano nella stessa dir del file da compilare.
Esempi: prova.ccino, fib.ccino, mutuaric.ccino.

ATTENZIONE. Si consiglia di provare esempi di mutua ricorsione (come ad esempio il programma mutuaric.ccino)


NOTE AGGIUNTIVE, CHIARIMENTI E COMMENTI DELLE SPECIFICHE

MODIFICA SINTASSI ";"
Per evitare inutili ripetizioni di ";" alla fine di alcuni comandi, la sintassi contenuta nelle specifiche del terzo modulo è stata modificata. Per i dettagli, vedere la versione aggiornata della descrizione dell'analizzatore sintattico o l'errata-corrige.

COMMENTO SULLE PARENTESI TONDE NELLE ESPRESSIONI
È stato aggiunto un commento sulle parentesi tonde nella scrittura delle espressioni e sono stati corretti i programmi ccino di prova. Per i dettagli, vedere la versione aggiornata della descrizione dell'analizzatore sintattico o l'errata-corrige.
ATTENZIONE> Visto che ci sono stati alcuni fraintendimenti sul significato di questa nota si vedano anche le seguenti considerazioni aggiuntive.

SUGGERIMENTO/NOTA III MODULO
Non essendoci alcun token o configurazione di token che segnala la fine di un programma CCINO, l'unico modo per capire che il programma è terminato è individuare il raggiungimento dell'end-of-file. È parte dell'implementazione dell'analizzatore sintattico capire quando è lecito che il file possa finire e come fare per individuarlo in modo corretto.

CORREZIONI E/O AGGIORNAMENTI DELLE SPECIFICHE
L'ultima modifica delle specifiche è del 26/08. Vedi l'errata-corrige.
La versione delle specifiche del IV modulo che contiene anche il main per la verifica è del 31/08.


Il progetto consiste nello sviluppo di un interprete per una versione semplificata del linguaggio C.
Il progetto è suddiviso in moduli che, se sviluppati nell'ordine proposto, porteranno gradualmente all'implementazione dell'intero interprete/compilatore.

Le specifiche del progetto sono disponibili in formato pdf (un programma per la lettura di pdf è Acrobat Reader).

Chiunque dovesse trovare errori nei testi è pregato di segnalarlo al docente.
I file con i testi potranno essere aggiornati con le correzioni. Le modifiche di rilievo - ovvero, le modifiche/correzioni che hanno impatto sulla implementazione dei moduli - saranno opportunamene evidenziate anche sul sito.

Errata Corrige/Aggiornamenti

(03/06/04)
È stato aggiornato il file ccinodefs.c. Il comando "#include <pinodefs.h>" è stato sostituito con il comando "#include <ccinodefs.h>".
(22/07/04)
È stato aggiornato il file ccinodefs.c. Nella "struct descr_fun", è rimpiazzato "struct ls_comm *" con "struct ls_commands *".
(12/08/04)
Sono stati corretti alcuni errori nella sintassi dei comandi contenuta nella specifica del terzo modulo (si veda p.2 della nuova versione della specifica dell'analizzatore sintattico)
(12/08/04)
È stato aggiunto un commento sulle parentesi nei comandi nella desrizione dell'analizzatore sintattico (si veda p.5 della nuova versione della specifica dell'analizzatore sintattico)
(12/08/04)
I file di prova fib.ccino e prova.ccino eranbo errati. Sono ora disponibili delle nuove versioni.
(12/08/04)
Nei file ccino-cc.h e ccino-cc.c è stato sostituito "wrsp" con "wsp" e "wrnl" con "wnl".
(26/08/04)
Nella definizione di "struct exp" contenuta in ccinodefs.h, il campo "args" di "funcall" non è di tipo "struct exp *args" ma di tipo "struct exp **args", essendo un puntatore ad un vettore di puntatori.

I file con le definizioni principali ed i main per la verifica dei moduli:

I file ccinodefs saranno aggiornati man mano che vengono fornite le specifiche dei moduli.

Chiunque dovesse trovare errori nei testi è pregato di segnalarlo al docente.
I file con i sorgenti potranno essere aggiornati. Le modifiche di rilievo - ovvero, le modifiche/correzioni che hanno impatto sulla implementazione dei moduli - saranno opportunamene evidenziate anche sul sito.

Modalità di consegna dei moduli

Per inviare i moduli del progetto occorre innanzitutto registrare i propri dati.

Vai alla pagina con le istruzioni per la registrazione.

Eseguita la registrazione dela matricola, i file con i sorgenti dei moduli del progetto potranno essere inviati mediante l'apposita scheda.

Vai alla pagina per l'invio dei moduli del progetto

Date di consegna dei moduli

Le scadenze (inderogabili) per la consegna dei moduli sono:

modulo     entro il
I (TS): Le tavole dei simboli 07/05/04
II (AL): L'analizzatore lessicale 30/06/04
III (AS): L'analizzatore sintattico 15/09/04
IV (EX): L'esecutore 25/09/04

Valutazione

Come riportato in dettagio nella descrizione del progetto, tutti i moduli saranno valutati indipendentemente. (Per la verifica di alcuni moduli serviranno anche i moduli precedentemente sviluppati. Se tali moduli non sono stati consegnati o non sono funzionanti, verranno usati usati dei moduli sviluppati dal docente.)

I moduli non sono tutti della stessa difficoltà. Il punteggio massimo che si può ottenere dall'implementazione corretta di un modulo è riportato nella seguente tabella

modulo voto
I (TS): Le tavole dei simboli 5
II (AL): L'analizzatore lessicale 8
III (AS): L'analizzatore sintattico 12
IV (EX): L'esecutore 10
Totale 35

Come si può notare, il punteggio totale ottenibile implementando correttamente tutti i moduli è di 35 punti.

Per superare l'esame si dovranno consegnare almeno tre moduli.

Un voto complessivo di 30 o 31 corrisponde a 30/30esimi; un voto superiore a 31 porta alla lode.

I pesi riportati in tabella sono il voto massimo per quel modulo. Requisiti essenziali affinché un modulo sia preso in considerazione per la valutazione sono:

Altri fattori che influiranno sulla valutazione sono: