in filter/src/main/java/org/apache/rocketmq/filter/parser/SelectorParser.java [195:364]
final public Expression comparisonExpression() throws ParseException {
Expression left;
Expression right;
Expression low;
Expression high;
String t, u;
boolean not;
ArrayList list;
left = unaryExpr();
label_4:
while (true) {
switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
case NOT:
case BETWEEN:
case IN:
case CONTAINS:
case STARTSWITH:
case ENDSWITH:
case 27:
case 28:
case 29:
case 30:
break;
default:
jjLa1[5] = jjGen;
break label_4;
}
switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
case 27:
jj_consume_token(27);
right = unaryExpr();
left = ComparisonExpression.createGreaterThan(left, right);
break;
case 28:
jj_consume_token(28);
right = unaryExpr();
left = ComparisonExpression.createGreaterThanEqual(left, right);
break;
case 29:
jj_consume_token(29);
right = unaryExpr();
left = ComparisonExpression.createLessThan(left, right);
break;
case 30:
jj_consume_token(30);
right = unaryExpr();
left = ComparisonExpression.createLessThanEqual(left, right);
break;
case CONTAINS:
jj_consume_token(CONTAINS);
t = stringLitteral();
left = ComparisonExpression.createContains(left, t);
break;
default:
jjLa1[8] = jjGen;
if (jj_2_2(2)) {
jj_consume_token(NOT);
jj_consume_token(CONTAINS);
t = stringLitteral();
left = ComparisonExpression.createNotContains(left, t);
} else {
switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
case STARTSWITH:
jj_consume_token(STARTSWITH);
t = stringLitteral();
left = ComparisonExpression.createStartsWith(left, t);
break;
default:
jjLa1[9] = jjGen;
if (jj_2_3(2)) {
jj_consume_token(NOT);
jj_consume_token(STARTSWITH);
t = stringLitteral();
left = ComparisonExpression.createNotStartsWith(left, t);
} else {
switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
case ENDSWITH:
jj_consume_token(ENDSWITH);
t = stringLitteral();
left = ComparisonExpression.createEndsWith(left, t);
break;
default:
jjLa1[10] = jjGen;
if (jj_2_4(2)) {
jj_consume_token(NOT);
jj_consume_token(ENDSWITH);
t = stringLitteral();
left = ComparisonExpression.createNotEndsWith(left, t);
} else {
switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
case BETWEEN:
jj_consume_token(BETWEEN);
low = unaryExpr();
jj_consume_token(AND);
high = unaryExpr();
left = ComparisonExpression.createBetween(left, low, high);
break;
default:
jjLa1[11] = jjGen;
if (jj_2_5(2)) {
jj_consume_token(NOT);
jj_consume_token(BETWEEN);
low = unaryExpr();
jj_consume_token(AND);
high = unaryExpr();
left = ComparisonExpression.createNotBetween(left, low, high);
} else {
switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
case IN:
jj_consume_token(IN);
jj_consume_token(31);
t = stringLitteral();
list = new ArrayList();
list.add(t);
label_5:
while (true) {
switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
case 32:
break;
default:
jjLa1[6] = jjGen;
break label_5;
}
jj_consume_token(32);
t = stringLitteral();
list.add(t);
}
jj_consume_token(33);
left = ComparisonExpression.createInFilter(left, list);
break;
default:
jjLa1[12] = jjGen;
if (jj_2_6(2)) {
jj_consume_token(NOT);
jj_consume_token(IN);
jj_consume_token(31);
t = stringLitteral();
list = new ArrayList();
list.add(t);
label_6:
while (true) {
switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
case 32:
break;
default:
jjLa1[7] = jjGen;
break label_6;
}
jj_consume_token(32);
t = stringLitteral();
list.add(t);
}
jj_consume_token(33);
left = ComparisonExpression.createNotInFilter(left, list);
} else {
jj_consume_token(-1);
throw new ParseException();
}
}
}
}
}
}
}
}
}
}
}
return left;
}