Introduzione

    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.