2016-02-29 63 views
0

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

回答

0

ANTLR4不能相互左递归规则应付,但它可以自动改写单左递归规则,以消除左递归,所以你可以用类似喂它:

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

用您需要的任何东西替换value标签。

+0

非常感谢,它完美的作品。我链接另一个相关重要性的讨论,解释递归和找到可能的实现参数http://stackoverflow.com/questions/15106240/antlr-chaining-1-to-1-grammar-rules-together-to-solve-条件语句 –