如何从解析器规则获取指定索引处的标记

时间:2014-09-24 09:43:51

标签: antlr antlr4

在我的自定义编辑器中,我想纠正从额外的错误解析器规则中检测到的错误。

例如我的解析器中有这个错误规则:

|   'if' '(' expr ')' ')'  expr

检测不必要的括号。

我可以在侦听器中获取开始和停止标记并计算位置。

但是对于我的修复,我需要额外的括号标记(在索引5处)来计算我的自定义语言编辑器中的位置,然后可以删除字符。

根据解析器规则在指定索引处获取令牌的正确方法是什么?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

最简单的方法是标记这样的额外)

|   'if' '(' expr ')' extra=')'  expr

在您的监听器中,您可以执行以下操作以获取)的索引:

int index = ctx.extra.getStartIndex();

如果未解析带有extra标签的替代方案,您可能会获得NPE,因此当有多个替代方案时,请检查ctx.extra是否不是null