C# 处理访问者错误的最佳实践

C# 处理访问者错误的最佳实践,c#,antlr4,C#,Antlr4,ANTLR4新手,但很酷。请原谅,如果这已经得到了回答,但我找不到答案 我想知道是否有一个好的/标准的/通用的做法来处理自定义访问者中的错误 例如,我有一个VisitEqualityExpression,它比较两个对象,如果对象不是同一类型的,则会失败 显然,我可以抛出/捕获,但我希望/寻找类似于ErrorListener的东西,我正在解析器上使用它。ErrorListener最酷的地方在于它提供了关于确切错误的详细信息。这可以在访客时间内完成吗 我想最好在解析时捕捉到这一点。例如,在解析时捕获

ANTLR4新手,但很酷。请原谅,如果这已经得到了回答,但我找不到答案

我想知道是否有一个好的/标准的/通用的做法来处理自定义访问者中的错误

例如,我有一个VisitEqualityExpression,它比较两个对象,如果对象不是同一类型的,则会失败

显然,我可以抛出/捕获,但我希望/寻找类似于ErrorListener的东西,我正在解析器上使用它。ErrorListener最酷的地方在于它提供了关于确切错误的详细信息。这可以在访客时间内完成吗

我想最好在解析时捕捉到这一点。例如,在解析时捕获'abc'==123?

我会向访问者添加一个
列表,如果出现错误,我会将错误添加到此列表中。您可以添加节点或仅添加行/列以及错误消息

它可能看起来像这样:

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

        //...
    }


}
类MyVisitor:MyGrammarNameVisitor
{
公共只读列表错误=新建列表();
重写对象visitMyRuleName(MyGrammarName.MyRuleNameContext ctx){
如果(错误)
{
添加(新的MyErrorType(行号、列、errorMessage、whateverElseMayBeUseful));
返回null;
}
//...
}
}