Antlr 如何从解析器规则中获取指定索引处的令牌

Antlr 如何从解析器规则中获取指定索引处的令牌,antlr,antlr4,Antlr,Antlr4,在我的自定义编辑器中,我想更正从额外的错误解析器规则中检测到的错误 例如,我的解析器中有以下错误规则: | 'if' '(' expr ')' ')' expr 它检测不必要的括号 我可以在侦听器中获取开始和停止标记,并计算位置 但是对于我的修复,我需要额外的括号标记(在索引5处)来计算自定义语言编辑器中的位置,这样就可以删除字符 根据解析器规则,在指定索引处获取令牌的正确方法是什么 非常感谢您的帮助。最简单的方法是将额外的)标记如下: | 'if' '(' expr ')' ext

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

例如,我的解析器中有以下错误规则:

|   'if' '(' expr ')' ')'  expr
它检测不必要的括号

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

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

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

非常感谢您的帮助。

最简单的方法是将额外的
)标记如下:

|   'if' '(' expr ')' extra=')'  expr
在您的侦听器中,您可以执行以下操作以获取
的索引:


如果没有解析带有
extra
标签的备选方案,您可能会得到一个NPE,因此当有多个备选方案时,请检查
ctx.extra
是否为
null

谢谢,这正是我需要的。如果我试图检测缺少的括号,是否还需要额外的标签,例如:|'如果'('expr expr或:|'{'exprlist类似于相反的内容,例如,extra=''?不,您不能标记缺少的标记。再次感谢您的快速回答!
int index = ctx.extra.getStartIndex();