获取表达式在被解析文本中的位置和长度

Obtaining an Expression's Position and Length within the Text Being Parsed

当我的 ANTLR 生成的解析器执行时,我想引发一个事件,其中包含正在计算的表达式的位置和长度,以便我可以在我的文本编辑器中突出显示该区域。

ANTLR 是否提供任何获取该信息(表达式在被解析文档中的位置和长度)的方法?

您可以使用 expression.getStart() 获取表达式的第一个标记,然后使用 .getLine()getCharPositionInLine() 分别获取行号和列号。

要获得长度,您可以从最后一个标记的停止索引中减去第一个标记的起始索引,然后加上 1(因为两个索引都包含在内,所以长度为 1 的表达式将具有相同的起始并停止指向构成表达式的单个字符的索引。

请注意,更明显的解决方案 expression.getText().length() 不会在长度中包含跳过的标记。