题
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;
}
//...
}
}
. 不隶属于 StackOverflow