java - 如何选择Antlr4运行时的启动规则?

标签 java antlr4

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/

相关文章:

未找到 Java I/O 文件

java - 在android中只从字符串中获取数字

intellij-idea - 开始规则 : <select from navigator or grammar> in antlr plugin in IntelliJ

c# - 语法识别 unlimited '{' expr '}' next to each-other

java - Spring Boot JPA 应用程序无法从 Spring Boot 2.0.2 启动,但可以在 Spring Boot 1.5.13 中正常运行

java - 无法使用linux机器在输入文件中添加新行

java - Tomcat 未加载 MSSQL 驱动程序

java - Antlr4 - 获取函数的参数 Java

antlr4 - 如何为字符串编写antlr4规则

parsing - 在词法分析器/解析器中删除所需的周围引号