我很惭愧地问。。。我为这种语言写了一个语法,从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_expr
和math_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 ')'
;