parsing - 获取表达式在被解析文本中的位置和长度
问题描述
当我的 ANTLR 生成的解析器执行时,我想引发一个包含正在评估的表达式的位置和长度的事件,以便我可以在我的文本编辑器中突出显示该区域。
ANTLR 是否提供任何获取该信息的方法(正在解析的文档中表达式的位置和长度)?
解决方案
您可以使用expression.getStart()
获取表达式的第一个标记,然后.getLine()
分别getCharPositionInLine()
获取行号和列号。
要获得长度,您可以从最后一个标记的停止索引中减去第一个标记的开始索引,然后加 1(因为两个索引都包含在内,因此长度为 1 的表达式将具有相同的开始和停止索引指向组成表达式的单个字符)。
请注意,更明显的解决方案expression.getText().length()
不会在长度中包含跳过的标记。
推荐阅读
- oracle12c - Oracle 12c IMPDP 错误
- php - 如何使用 PHP 将值插入 FK 列
- docker - docker-compose 构建冻结。没有错误
- redirect - weblogic & OHS:如何将一个 url 转发到另一台服务器
- angular - 使用管道的角度复选框过滤器
- git - git commit 文件过去,但没有设置到HEAD?
- regex - 正则表达式 exp 与测试字符串不匹配
- c# - NET Core 应用程序内存即使正确处置/未引用也会持续增长
- apache-spark - Spark 数据集编码器:kryo() 与 bean()
- jquery - ReferenceError:找不到变量:io