以下几组规则是相互左递归的

时间:2016-02-29 15:20:10

标签: antlr4

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

1 个答案:

答案 0 :(得分:0)

ANTLR4无法处理相互左递归规则,但它可以自动重写单个左递归规则以消除左递归,因此您可以使用以下内容来提供它:

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

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