Sto usando ANTLR per analizzare le espressioni logiche in uno strumento Java sto scrivendo, e sto avendo problemi perché passare le stringhe di input non valide al lexer e al parser ANTLR generati non causa eventuali eccezioni. Invece di lanciare una RecognitionException, come mi aspetterei, i file generati stampano semplicemente il messaggio di errore sulla console e restituiscono come se non si fossero verificati errori, causando il crash del mio programma quando viene eseguito successivamente nei dati vuoti.ANTLR non genera errori sull'input non valido
Ho usato ANTLRWorks versione 1.4.3 per generare i file, e sembra che ci dovrebbe essere una sorta di opzione per far sì che si generino errori piuttosto che stampare sulla console, ma non ho trovato nulla. Qualcuno sa come ottenere ANTLR per lanciare effettivamente i messaggi di errore? Ho visto che questo stesso problema in C# è stato risolto utilizzando una versione precedente di ANTLR, è quello che devo fare?
EDIT: Dopo Bart mi ha segnalato in direzione di quello che stavo cercando, ho trovato questa pagina
https://theantlrguy.atlassian.net/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3
sezione "Gestione degli errori", il cui codice che aveva fatto quello che voglio di più esattamente. Per cambiare il modo in cui ANTLR cattura eccezioni, si può dire questo nel file di grammatica:
@rulecatch {
catch (RecognitionException e) {
throw e;
}
}
Questa forze ANTLR per generare l'eccezione invece di gestirlo e di recupero. Ci sono anche alcune cose in quella sezione sull'override delle funzioni di mismatch e recovery per assicurarsi che vengano lanciate tutte le eccezioni possibili.
Oh, grazie sooo molto, sapevo che ci doveva essere un modo semplice per modificare solo il file di grammatica per fare quello che voglio, ma ANTLR è così grande, non l'ho fatto sapere esattamente cosa cercare. –
Siete i benvenuti @BeaMetitiri. –
Il collegamento è obsoleto – gvlasov