当我的ANTLR生成的解析器执行时,我想引发一个事件,其中包含要求值的表达式的位置和长度,以便可以在文本编辑器中突出显示该区域。
ANTLR是否提供任何获取信息的方法(表达式在被解析文档中的位置和长度)?
您可以使用expression.getStart()
获取表达式的第一个标记,然后使用.getLine()
和getCharPositionInLine()
分别获取行号和列号。
要获得长度,您可以从最后一个标记的终止索引中减去第一个标记的起始索引,然后加1(因为两个索引都包含在内,所以长度为1的表达式将具有相同的起始和终止索引指向组成表达式的单个字符)。
注意,expression.getText().length()
的更明显的解决方案是在长度上不包括跳过的标记。