java - Antlr 4 无法编译带参数的直接递归表达式

标签 java parameters antlr4

ANTLR 4 支持直接左递归,如下所示:

grammar test2;

options {
    language = Java;
}


start : expr;

expr :
    NUMBER
    | expr ('+'|'-') expr;


NUMBER:
    ('+'|'-')? DIGIT+;

fragment
DIGIT:
    '0'..'9';

但是如果expr有参数,例如:

expr [ int i] :
    NUMBER
    | expr[&i] ('+'|'-') expr[&i]
    ;

编译时会失败,错误消息如下:
找不到规则 GrammarSpec 或树结构错误:...

目前 ANTLR 4 不支持此类表达式,还是我犯了一些错误?

最佳答案

你是对的。包含直接左递归的规则可能不包含用户定义的参数列表。请注意,生成的代码包含一个参数,该参数是在自动左递归消除步骤期间创建的。

关于java - Antlr 4 无法编译带参数的直接递归表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18523592/

相关文章:

java - 如何获取系统语言?

java - 带有 JPA 子查询的 Spring Data 规范

java - Android 应用程序不幸的是应用程序已停止

c# - 学步车可以停下来吗?

java - Kademlia Java 实现

c# - 在 C# 中用文本更新图像后从数据库加载图像时参数无效

c# - 为什么必须转换 SQL 查询的返回参数值?

Django 接受 GET 参数

java - : '#i' when parsing c grammar 处的 token 识别错误

Antlr4 左递归规则包含左递归替代项,后面可以跟空字符串