java 在ANTLR v4中,是否有方法列出给定规则的下一个可能规则?

bsxbgnwa  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(99)

我已经看过ANTLR的书,但是我还没有找到一种方法来获得给定规则的下一个可能的规则。
例如,使用像

grammar ArrayInit;
init : '{' value (',' value)* '}' ; 
value : init 
    | INT
    ;
INT : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;

有没有一种方法可以迭代地遍历规则并列出下一个可能的规则?
对于类似上面的语法,我希望能够从init规则开始,当我给予init规则时,我希望得到{value、(,value)和}等下一个可能的选项。
这样我就可以知道下一个可能的标记是什么了,我可以从init规则开始,迭代地遍历语法,看到init-〉{ value }可能有逗号变化。
我已经看过ANTLR类,我可以使用解析器的getRuleNames函数来获取所有规则,但是,我不能使用它来确定哪些规则遵循给定的规则。

dauxcl2d

dauxcl2d1#

在内部,解析引擎并不按照规则工作,而是按照ATN状态工作,并且必须遍历这个增强的转换网络以找到遵循给定状态的状态(也称为跟随集)。
对于单一的前瞻,使用运行时中的LL1Analyzer类。对于更复杂的前瞻,可能需要收集规则名称来搜索代码完成引擎(例如antlr4-c3)。

相关问题