提问人:JAKE 提问时间:3/27/2023 更新时间:3/27/2023 访问量:97
在 ANTLR v4 中,有没有办法列出给定规则的下一个可能规则?
In ANTLR v4, is there a way to list the next possible rules for a given rule?
问:
我已经浏览了 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赞
Mike Lischke
3/27/2023
#1
在内部,解析引擎不是在规则方面工作,而是在 ATN 状态方面工作,并且必须遍历这个增强的转换网络来查找遵循给定状态(也称为跟随集)的状态。
若要提前查看,请使用运行时中的 LL1Analyzer 类。对于更复杂的前瞻,可能收集规则名称,请搜索代码完成引擎(例如 antlr4-c3)。
评论