小编i_h*_*ing的帖子

获取ParserVisitor中的行号?

我正在尝试在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)

antlr parse-tree

17
推荐指数
3
解决办法
8938
查看次数

标签 统计

antlr ×1

parse-tree ×1