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