ANTLR4左递归错误

时间:2017-11-03 16:47:41

标签: recursion antlr antlr4

文件 power.g4 中的我的ANTLR4语法是:

assign     : id '=' expr ;
id         : 'A' | 'B' | 'C' ;
expr       : expr '+' term
           | expr '-' term
           | term ;
term       : term '*' factor
           | term '/' factor
           | factor ;
factor     : expr '**' factor
           | '(' expr ')'
           | id ;
WS         : [ \t\r\n]+ -> skip ;

当我运行命令

  

antlr4 power.g4

发生此错误:

  

错误(119):power.g4 :::以下几组规则是相互左递归的[expr,factor,term]

我该怎么办?

1 个答案:

答案 0 :(得分:0)

要避免左递归错误,请将所有形式的expr放在一个规则中,按所需优先级排序:

expr       : '(' expr ')'
           | expr '+'  expr 
           | expr '-'  expr 
           | expr '*'  expr 
           | expr '/'  expr 
           | expr '**' expr 
           | id 
           ;