我正在编写一个 antlr 语法,我希望能够在其中嵌套表达式,它可以是“简单”表达式或布尔表达式(带有可选括号)。一个简单的表达式只是一个带有 lhs 和 rhs 的表达式,例如a = 5
我希望能够支持这些类型的表达式:
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
是相互递归的。我理解为什么会发生这种情况,但是如果我希望能够在彼此之间嵌套布尔表达式,我不确定如何解决这个问题。