L'obiettivo del corso di Linguaggi e Traduttori è
fondamentalmente quello di fornire gli strumenti e le conoscenze necessarie
per comprendere in cosa consiste un linguaggio di programmazione.
Va da sè che il punto di arrivo è
quello di acquisire la capacità di realizzare autonomamente un linguaggio
di programmazione. Ovvero l'obiettivo finale dello studente è quello
di essere in grado di implementare i vari componenti software che sono
necessari per poter usare un linguaggio di programmazione.
Questa relazione ha lo scopo di mostrare il percorso
seguito dagli autori nello studio degli argomenti del corso. Tale percorso
è stato affiancato dalla realizzazione di un interprete,
in modo da applicare nella pratica le nozioni acquisite.
L'interprete quindi è stato realizzato proprio
con l'obiettivo di rappresentare un banco di prova per ciò che si
era studiato. In questo modo la sua implementazione ha consentito di aquisire
esperienza diretta degli argomenti, di evidenziare i problemi realizzativi
che si incontrano nella costruzione di un interprete, di mettere a confronto
le diverse possibili soluzioni, etc.
L'interprete è in realtà costituito
da due interpreti riuniti sotto una unica interfaccia grafica: un interprete
Scheme
(dialetto del Lisp) ed un interprete Prolog. La base su cui
poggiano i due interpreti è la stessa. E' stata realizzata durante
la costruzione dell'interprete Scheme, ma pensata in modo da essere generica
e dunque utilizzabile per poter costruire un linguaggio di programmazione
qualunque.
Il sistema quindi è modulare, ovvero
possono essere realizzati a partire da questa unica base nuovi interpreti.
Anche gli interpreti Scheme e Prolog sono essi stessi modulari e basati
su una metodologia di programmazione ad oggetti.
Oltre alla modularità abbiamo anche fatto
attenzione alla espandibilità. E' possibile aggiungere funzioni
e comandi al nostro interprete senza mettere più mano al nostro
codice. Si estendono le nostre classi aggiungendo il codice dedicato ai
comandi aggiunti. Anche l'interfaccia grafica è riutilizzabile.
Il tutto è stato implementato in linguaggio Java. La scelta di Java, Scheme e Prolog ha consentito di approfondire i tre tipi fondamentali di linguaggi di programmazione trattati durante il corso: linguaggi di programmazione ad oggetti, linguaggi di programmazione funzionali, linguaggi di programmazione logici.
Questo documento descrive i passi che hanno portato alla realizzazione dell'interprete, ripercorrendo quindi su un esempio gli argomenti trattati durante il corso.