ANTLR4又是一个左递归



我很惭愧地问。。。我为这种语言写了一个语法,从int到bool,反之亦然。

logic_expr : expr NOT? OR | AND expr
       | expr '|' expr SMALLER | LARGER
       | NUMBER
       | NUMBER_SHORT
       | IDENT
       | LOGIC_DEFINED
       ;
math_expr : expr ADD | SUB expr
      | NUMBER
      | NUMBER_SHORT
      | IDENT
      | LOGIC_FULL
      ;
expr : logic_expr
     | math_expr
     | IDENT
     | LOGIC_DEFINED
     | '(' expr ')'
     ;

但antlr告诉我"以下规则集是相互左写的[logic_expr,expr,math_expr]"我不明白我的语法哪里错了?

从ANTLR 4.2.2开始,ANTLR 4目前不支持包含间接左递归的语法。这个限制通过问题#522得到了解决,我希望它能成为ANTLR 4.3。

由于ANTLR 4已经支持直接左递归,因此可以通过内联logic_exprmath_expr规则来解决此问题。我还编辑了3个破碎的替代品,添加了你省略的括号。我没有消除原始规则中存在的歧义。

expr
       : expr NOT? (OR | AND) expr
       | expr '|' expr (SMALLER | LARGER)
       | NUMBER
       | NUMBER_SHORT
       | IDENT
       | LOGIC_DEFINED
       | expr (ADD | SUB) expr
       | NUMBER
       | NUMBER_SHORT
       | IDENT
       | LOGIC_FULL
       | IDENT
       | LOGIC_DEFINED
       | '(' expr ')'
       ;

相关内容

  • 没有找到相关文章

最新更新