我正在尝试在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);
}
Run Code Online (Sandbox Code Playgroud)
编辑2:我的词法分析器和解析器规则是相当标准的,例如在词法分析器中:
INT : 'int' ;
CHAR : 'char' ;
BOOL : 'bool' ;
STRING : 'string' ;
Run Code Online (Sandbox Code Playgroud)
...在解析器规则baseType中:
baseType : INT | CHAR | BOOL | STRING ;
Run Code Online (Sandbox Code Playgroud)