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



ANTLR4新手,但很酷。如果这个问题已经有了答案,请原谅,但是我找不到答案。

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

。我有一个VisitEqualityExpression比较两个对象,如果对象不是同一类型,它应该失败。

显然我可以抛出/捕获,但我希望/寻找类似于我在解析器上使用的ErrorListener的东西。ErrorListener很酷的一点是它给出了关于确切错误的详细信息。这可以在访客时间做吗?

我认为在解析时捕获它会更好。例如,解析时捕获'abc' == 123 ?

我会为访问者添加一个List<MyErrorType>,并在出现错误时将错误添加到此列表中。您可以添加节点或仅行/列以及错误消息。

它可能看起来像这样:

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

}

最新更新