处理访客错误的最佳做法

时间:2014-07-29 01:23:54

标签: c# antlr4

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

我想知道在自定义访问者中处理错误是否有良好/标准/通用做法。

E.g。我有一个VisitEqualityExpression,用于比较两个对象,如果对象的类型不同,这两个对象应该失败。

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

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

1 个答案:

答案 0 :(得分:1)

我向访问者添加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;
        }

        //...
    }


}