我正在尝试在我的ParserVisitor(访问antlr生成的语法树)中获取行号以获得更具体的错误信息。然而,在这个类中我只有上下文ctx
,我可以使用ctx.getText()
这样的方式,但无法使用getLine()
。有没有方法可以做到这一点?
ctx.getPayload()
能在这里使用吗?如果可以,怎么做?
编辑:我正在使用ANTLR 4创建Java文件。
试图在像这样的方法中的访问者中访问行号:
@Override
public Type visitStatAssign(@NotNull BasicParser.StatAssignContext ctx) {
...
// some semantic error detected
int lineNo = ...
System.err.("Semantic error at line " + lineNo);
}
编辑 2: 我的词法分析器和语法分析器规则相当标准,例如,在词法分析器中:
INT : 'int' ;
CHAR : 'char' ;
BOOL : 'bool' ;
STRING : 'string' ;
...在解析器规则 baseType 中:
baseType : INT | CHAR | BOOL | STRING ;