首页 > 解决方案 > 获取表达式在被解析文本中的位置和长度

问题描述

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

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

标签: parsingantlrantlr4antlr3

解决方案


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

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

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


推荐阅读