Antlr4 在 extends Parser
中创建方法,其名称与规则相同。例如,如果我的语法中有名为“program”的规则,它将创建方法 program()
。我可以调用这个方法,进行解析。
但是如果我想在运行时选择启动规则怎么办?
我查看了实现并找到了开始
public final ProgramContext program() throws RecognitionException {
ProgramContext _localctx = new ProgramContext(_ctx, getState());
enterRule(_localctx, 0, RULE_program);
这意味着我无法按名称或索引选择规则,因为我同时需要两件事:ProgramContext
类和 RULE_program
常量。
事实上有可能吗?
我可以定义一些默认规则并自动调用它吗?
最佳答案
所有解析器语法规则均由生成的解析器中的方法实现。如果你的语法定义了
program : .... ;
statemt : .... ;
语法将有方法
public final ProgramContext program() throws RecognitionException ....
public final StatemtContext statemt() throws RecognitionException ....
两者都可以被称为评估 token 流的启动规则。
查看此answer建议一种以编程方式识别解析器规则的方法。
关于java - 如何选择Antlr4运行时的启动规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41264509/