From 2fea5e3a6bb0f34ebe5cdf8e3b77dd333cf2800c Mon Sep 17 00:00:00 2001 From: Gideon Le Grange Date: Fri, 3 Jan 2020 08:46:09 +0200 Subject: [PATCH] Added support for parentheses around expressions as per #72 --- src/main/java/me/legrange/mikrotik/impl/Parser.java | 11 +++++++++-- src/main/java/me/legrange/mikrotik/impl/Scanner.java | 7 +++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/legrange/mikrotik/impl/Parser.java b/src/main/java/me/legrange/mikrotik/impl/Parser.java index 8fe9fd1..273c249 100644 --- a/src/main/java/me/legrange/mikrotik/impl/Parser.java +++ b/src/main/java/me/legrange/mikrotik/impl/Parser.java @@ -79,7 +79,7 @@ class Parser { } private void expr() throws ParseException { - expect(Token.NOT, Token.TEXT); + expect(Token.NOT, Token.TEXT, Token.LEFT_BRACKET); switch (token) { case NOT: notExpr(); @@ -106,6 +106,13 @@ class Parser { } } 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. switch (token) { @@ -122,7 +129,7 @@ class Parser { cmd.addQuery("?#&"); } - private void orExpr() throws ParseException { + private void orExpr() throws ParseException { next(); // eat or expr(); cmd.addQuery("?#|"); diff --git a/src/main/java/me/legrange/mikrotik/impl/Scanner.java b/src/main/java/me/legrange/mikrotik/impl/Scanner.java index 7ac20fc..e899b2f 100644 --- a/src/main/java/me/legrange/mikrotik/impl/Scanner.java +++ b/src/main/java/me/legrange/mikrotik/impl/Scanner.java @@ -28,6 +28,7 @@ class Scanner { SLASH("/"), COMMA(","), EOL(), WS, TEXT, LESS("<"), MORE(">"), EQUALS("="), NOT_EQUALS("!="), PIPE("!"), + LEFT_BRACKET("("), RIGHT_BRACKET(")"), WHERE, NOT, AND, OR, RETURN; @Override @@ -80,6 +81,12 @@ class Scanner { case '=': nextChar(); return EQUALS; + case '(' : + nextChar(); + return LEFT_BRACKET; + case ')' : + nextChar(); + return RIGHT_BRACKET; case '!': return pipe(); case '"':