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