Added support for parentheses around expressions as per #72

This commit is contained in:
Gideon Le Grange 2020-01-03 08:46:09 +02:00
parent 95c0abfec4
commit 2fea5e3a6b
2 changed files with 16 additions and 2 deletions

View File

@ -79,7 +79,7 @@ class Parser {
} }
private void expr() throws ParseException { private void expr() throws ParseException {
expect(Token.NOT, Token.TEXT); expect(Token.NOT, Token.TEXT, Token.LEFT_BRACKET);
switch (token) { switch (token) {
case NOT: case NOT:
notExpr(); notExpr();
@ -106,6 +106,13 @@ class Parser {
} }
} }
break; break;
case LEFT_BRACKET : {
next();
expr();
expect(Token.RIGHT_BRACKET);
next();
}
break;
} }
// if you get here, you had a expression, see if you want more. // if you get here, you had a expression, see if you want more.
switch (token) { switch (token) {

View File

@ -28,6 +28,7 @@ class Scanner {
SLASH("/"), COMMA(","), EOL(), WS, TEXT, SLASH("/"), COMMA(","), EOL(), WS, TEXT,
LESS("<"), MORE(">"), EQUALS("="), NOT_EQUALS("!="), PIPE("!"), LESS("<"), MORE(">"), EQUALS("="), NOT_EQUALS("!="), PIPE("!"),
LEFT_BRACKET("("), RIGHT_BRACKET(")"),
WHERE, NOT, AND, OR, RETURN; WHERE, NOT, AND, OR, RETURN;
@Override @Override
@ -80,6 +81,12 @@ class Scanner {
case '=': case '=':
nextChar(); nextChar();
return EQUALS; return EQUALS;
case '(' :
nextChar();
return LEFT_BRACKET;
case ')' :
nextChar();
return RIGHT_BRACKET;
case '!': case '!':
return pipe(); return pipe();
case '"': case '"':