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();