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

  • 本文关键字:递归 规则集 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]+ ;

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

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

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

相关内容

  • 没有找到相关文章

最新更新