我试图在我的 ParserVisitor 中获取更具体的错误消息的行号(访问由 antlr 生成的解析树)。但是,我在这门课上只有 context 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 ;