Behrooz Fard
Behrooz Fard

Reputation: 555

ANTLR4 left-recursive error

My ANTLR4 grammar in file power.g4 is this:

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 ;

When I run command

antlr4 power.g4

This error occurred:

error(119): power.g4::: The following sets of rules are mutually left-recursive [expr, factor, term]

What can I do?

Upvotes: 1

Views: 906

Answers (1)

GRosenberg
GRosenberg

Reputation: 5991

To avoid the left recursion error, put all forms of an expr in one rule, ordered by desired precedence:

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

Upvotes: 2

Related Questions