From 10f88ad9f0daddb3b542decf9bed0a380b901382 Mon Sep 17 00:00:00 2001 From: GideonLeGrange Date: Mon, 14 Apr 2014 16:19:03 +0200 Subject: [PATCH] Slight scanner and parser error handling improvements --- .../java/me/legrange/mikrotik/impl/Parser.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/legrange/mikrotik/impl/Parser.java b/src/main/java/me/legrange/mikrotik/impl/Parser.java index a2f47d2..e4fa3a0 100644 --- a/src/main/java/me/legrange/mikrotik/impl/Parser.java +++ b/src/main/java/me/legrange/mikrotik/impl/Parser.java @@ -20,7 +20,7 @@ class Parser { /** run parse on the internal data and return the command object */ private Command parse() throws ParseException { command(); - while (!((token == Token.WHERE) || (token == Token.RETURN) || (token == Token.EOL))) { + while (!is(Token.WHERE, Token.RETURN, Token.EOL)) { param(); } if (token == Token.WHERE) { @@ -54,8 +54,8 @@ class Parser { expect(Token.TEXT); StringBuilder val = new StringBuilder(text); next(); - while (token == Token.COMMA) { - val.append(","); + while (is(Token.COMMA, Token.SLASH)) { + val.append(token); next(); expect(Token.TEXT); val.append(text); @@ -163,10 +163,15 @@ class Parser { } private void expect(Token...tokens) throws ParseException { + if (!is(tokens)) + throw new ParseException(String.format("Expected %s but found %s at position %d", Arrays.asList(tokens), this.token, scanner.pos())); + } + + private boolean is(Token...tokens) { for (Token want : tokens) { - if (this.token == want) return; + if (this.token == want) return true; } - throw new ParseException(String.format("Expected %s but found %s at position %d", Arrays.asList(tokens), this.token, scanner.pos())); + return false; } /** move to the next token returned by the scanner */