Le migliori pratiche per la gestione degli errori nel visitatore
Domanda
antlr4 newbie, ma è fresco dang.Scusi Se questo è già stato risposto, ma non ho trovato la risposta.
Mi sto chiedendo se c'è una pratica buona / standard / comune per affrontare errori in un visitatore personalizzato.
E.G.Ho una visiteAqualityExpression che confronta due oggetti che dovrebbero fallire se gli oggetti non sono dello stesso tipo.
Ovviamente posso lanciare / catturare, ma speravo / alla ricerca di qualcosa come un errore che sto usando sul parser.La cosa interessante dell'informazione dell'errorente è che fornisce informazioni veramente dettagliate sull'ext Error.Può essere fatto un tempo di visitatore?
Presumo che sia meglio catturare questo a Parse Time.Per esempio.Catch 'ABC'== 123 Quando si analizza?
Soluzione
Aggiungerei un List<MyErrorType>
al visitatore e aggiungere l'errore a questo elenco se si verifica.È possibile aggiungere il nodo o solo la riga / colonna insieme a un messaggio di errore.
Potrebbe sembrare qualcosa del genere:
class MyVisitor : MyGrammarNameVisitor<object>
{
public readonly List<MyErrorType> errors = new List<MyErrorType>();
override object visitMyRuleName(MyGrammarName.MyRuleNameContext ctx){
if (erroneous)
{
errors.Add(new MyErrorType(linenumber, column, errorMessage, whateverElseMayBeUseful));
return null;
}
//...
}
}
.