我已经看过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
函数来获取所有规则,但是,我不能使用它来确定哪些规则遵循给定的规则。
1条答案
按热度按时间dauxcl2d1#
在内部,解析引擎并不按照规则工作,而是按照ATN状态工作,并且必须遍历这个增强的转换网络以找到遵循给定状态的状态(也称为跟随集)。
对于单一的前瞻,使用运行时中的LL1Analyzer类。对于更复杂的前瞻,可能需要收集规则名称来搜索代码完成引擎(例如antlr4-c3)。