2014-09-23 13 views
9

Con ANTLR I analizza una grammatica. Gli errori ANTLR sono indicati in un editor personalizzato per la grammatica. Tuttavia, vorrei disabilitare la stampa dei messaggi di errore su una console Java.ANTLR 4: Evita errori nella stampa sulla console

Ho implementato il mio BaseErrorListener e rimosso il default, come descritto nel libro ANTLR:

MyErrorListener errList=new MyErrorListener(); 
lexer.removeErrorListeners(); 
lexer.addErrorListener(errList); 
parser.removeErrorListeners(); 
parser.addErrorListener(errList); 

uscite Ancora mi vengono stampati alla mia console Java (collegato all'uscita ed errore flusso di Java).

Come disattivare la stampa sulla console in ANTLR?

+0

Cosa stai facendo nel vostro "MyErrorListener"? –

+0

Nel mio listener che estende BaseErrorListener raccolgo errori estrarre il numero di lino per contrassegnarli nel mio editor personalizzato. Non stampo nulla sullo standard output. – Marcel

risposta

1

Ho finalmente trovato la soluzione. Ho un filtro prima la grammatica:

Filter filter = new Filter(tokens) 

in cui l'ascoltatore del filtro (una classe parser pre) deve anche essere rimosso:

filter.removeErrorListeners(); 
+0

Questa risposta è sbagliata rimuove tutti i listener ma si desidera rimuovere solo l'ascoltatore che stampa sulla console. Si prega di consultare la risposta @uwolfer. – Trismegistos

3

È possibile controllare ciò che gli ascoltatori si dispone

for (ANTLRErrorListener listener : parser.getErrorListeners()) { 
     System.out.println(listener); 
} 

Cercare ConsoleErrorListener.

+1

Grazie per la risposta, non ho controllato questa domanda per un po '. Ho un listener personalizzato che estende BaseErrorListener. Questo (il mio ascoltatore) è quello che ottengo come output stampato con lo snippet di codice sopra. – Marcel

Problemi correlati