Matteo Iuliani
L'obiettivo di questa tesi è estendere l'interprete tuProlog al fine di supportare il meccanismo linguistico che Prolog offre per la gestione delle eccezioni.
Allo stato attuale, i predicati interessati dall'errore semplicemente falliscono, mentre andrebbe supportato il meccanismo per la gestione delle eccezioni specificato nello standard ISO/IEC 13211-1 e implementato in molti altri interpreti Prolog.
Lo standard prevede due predicati per fare ciò: throw/1 permette di lanciare un?eccezione all'interno di un predicato in caso di errore, mentre catch/3 può essere utilizzato per prevenire la terminazione forzata di un programma Prolog causata da eventuali errori. Il primo predicato ha una semantica simile a quella del throw di Java, mentre il secondo è assimilabile a un blocco try/catch. Inoltre lo standard classifica in modo molto preciso gli errori che si possono verificare durante l?esecuzione dei predicati, e descrive per ognuno di essi la sintassi dell?eccezione da lanciare.
Il progetto dell'estensione dovrà dunque operare sul motore a stati di tuProlog, introducendo un apposito stato Exception in cui transitare in caso di eccezioni e che abbia lo scopo di gestirle. Tutti i predicati delle varie librerie di tuProlog dovranno quindi essere rivisti, in modo da lanciare le opportune eccezioni in caso di errori invece che fallire.
Occorrerà inoltre affrontare la questione della generazione e della gestione di eccezioni Java all'interno di programmi Prolog che utilizzino oggetti Java durante la computazione: i metodi Java invocati via JavaLibrary possono infatti lanciare eccezioni, e anche in questo caso si deve progettare un meccanismo che renda possibile gestirle.