以此规则/捕获为例:
section : (title sstart row+ send);
catch[Exception e] {System.out.println("Notification: Problem on line " + *line # here*); System.exit(0);}
我怎样才能获得引发错误的令牌的行号?
答案 0 :(得分:0)
当您查看放置了异常块的生成代码时,您将看到它是用于解析section
规则的方法的一部分,可能类似于:
public final SectionContext section() throws RecognitionException {
SectionContext _localctx = new SectionContext(_ctx, getState());
...
}
如您所见,为此规则创建了一个解析上下文(_localctx
),它将获取所有子上下文以及对构成此规则的第一个和最后一个标记的引用(请参阅ParserRuleContext.start
和ParserRuleContext.stop
。您可以在此处获取源信息。
可能是这个SectionContext
实例在异常时尚未完成。在这种情况下,您可以使用父上下文(_ctx
创建调用中的SectionContext
参数)。
答案 1 :(得分:0)
如果您有一个ParserRuleContext ctx,您可以将该行知道为:
ctx.start.getLine()
你可以知道这个位置:
ctx.start.getCharPositionInLine()