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/