+
+ | a_expr BETWEEN SYMMETRIC b_expr AND b_expr %prec BETWEEN
+ {
+ $$ = (Node *) makeA_Expr(AEXPR_OR, NIL,
+ (Node *) makeA_Expr(AEXPR_AND, NIL,
+ (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $4),
+ (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $6)),
+ (Node *) makeA_Expr(AEXPR_AND, NIL,
+ (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", $1, $6),
+ (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", $1, $4)));
+ }
+ | a_expr NOT BETWEEN SYMMETRIC b_expr AND b_expr %prec BETWEEN
+ {
+ $$ = (Node *) makeA_Expr(AEXPR_AND, NIL,
+ (Node *) makeA_Expr(AEXPR_OR, NIL,
+ (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $5),
+ (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $7)),
+ (Node *) makeA_Expr(AEXPR_OR, NIL,
+ (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $7),
+ (Node *) makeSimpleA_Expr(AEXPR_OP, ">", $1, $5)));
+ }
+
+