我正在编写一个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
是相互左递归的。我理解为什么正在发生,但我不太确定如何解决这个问题,如果我想能够在彼此内嵌套布尔表达式
在www.antlr.org的主页上,您可以看到以下示例语法:
grammar Expr;
prog: (expr NEWLINE)* ;
expr: expr ('*'|'/') expr
| expr ('+'|'-') expr
| INT
| '(' expr ')' ;
稍微编辑一下,它就会是你需要的。这是ANTLR 4。你用的是哪个版本?我相信每个版本的ANTLR都有一个表达式语法示例。