Antlr4 Newbie,但它很酷。赦免如果这已经被回答,但我找不到答案。

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

e.g。我有一个visitequalityExpression,它比较了两个对象,如果对象不相同类型,则应该失败。

显然我可以扔/抓住,但我希望/寻找像我在解析器上使用的errowListener这样的东西。关于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;
        }

        //...
    }


}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top