以下规则集是相互左递归的
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
标签。
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
标签。