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?

È stato utile?

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;
        }

        //...
    }


}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top