1

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]
    ;

它会在编译过程中失败,并显示如下错误消息:
can't find rule grammarSpec or tree structure error:...

目前 ANTLR 4 不支持这样的表达方式还是我犯了一些错误?

4

1 回答 1

2

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

于 2013-08-30T03:27:25.430 回答