以下规则集是相互左递归的

the following sets of rules are mutually left-recursive

sumScalarOperator 给我这个错误,似乎 antlr 将其视为可能的无限递归循环。我怎样才能避免它?

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

ANTLR4 无法处理相互左递归规则,但它可以自动重写单个左递归规则以消除左递归,所以你可以用类似的东西来喂它:

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

用您需要的任何内容替换 value 标签。