Roberto S
Roberto S

Reputation: 15

the following sets of rules are mutually left-recursive

The sumScalarOperator gives me this error, it seems that antlr see it like a possible infinite recursion loop. How can i avoid it?

sumScalarOperator: function SUM_TOKEN function;

function :
         | INTEGER_TOKEN
         | NUMERIC_TOKEN
         | sumScalarOperator
         | ID;

ID : [A-Za-z_-] [a-zA-Z0-9_-]*;
INTEGER_TOKEN: [0-9]+;
NUMERIC_TOKEN: [0-9]+'.'[0-9]+ ;

Upvotes: 1

Views: 2063

Answers (1)

Lucas Trzesniewski
Lucas Trzesniewski

Reputation: 51430

ANTLR4 can't cope with mutually left-recursive rules, but it can rewrite single left-recursive rules automatically to eliminate the left-recursion, so you can just feed it with something like:

function : function SUM_TOKEN function  # sumScalarOperator
         | INTEGER_TOKEN                # value
         | NUMERIC_TOKEN                # value
         | ID                           # value
         ;

Replace the value label with anything you need.

Upvotes: 3

Related Questions