2
我正在写一个antlr语法,我希望能够嵌套表达式,它可以是“简单”表达式或布尔表达式(带有可选的圆括号)。一个简单的表达仅仅是一个与LHS和RHS,如a = 5
antlr用于嵌套布尔表达式的左递归
我希望能够支持这些类型的表达式:
a = 5
a = 5 OR b = 10
a = 5 OR (b = 10 AND c = 12)
(a = 5 AND b = 10) OR (c = 12 AND D = 13)
我的语法是这样的:
STRING: CHAR+;
fragment CHAR: ('a'..'z' | 'A'..'Z' | '0'..'9');
booleanOp: 'AND' | 'OR';
simpleExpr: STRING '=' STRING;
expr: simpleExpr | parenExpr | booleanExpr;
parenExpr: '(' expr ')';
booleanExpr: expr (booleanOp expr)+;
我得到一个错误,expr
和booleanExpr
是相互左递归。我明白为什么这是发生的,但我真的不知道如何解决这个问题,如果我想能够嵌套布尔表达式在彼此。
我使用antlr3,但让我试试4 ...它似乎更接受 – 2013-05-09 19:23:32
是的,antlr4使它更容易,谢谢。 – 2013-05-09 19:45:16
我想知道为什么expr规则没有给出“左递归”错误。 – 2018-02-14 19:40:25