Fixed lookahead.
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / string / tokenizer / Tokenizer.java
index 899f8c4..01216d8 100755 (executable)
@@ -46,7 +46,7 @@ public class Tokenizer {
         return this;
     }
 
-    public void expectNextToken(final String value)
+    public void expectAndConsumeNextToken(final String value)
             throws InvalidSyntaxException {
         final TokenizerMatch match = getNextToken();
         if (!value.equals(match.token))
@@ -104,6 +104,31 @@ public class Tokenizer {
         return false;
     }
 
+    public TokenizerMatch peekNextToken(){
+        TokenizerMatch result = getNextToken();
+        unreadToken();
+        return result;
+    }
+
+    public boolean peekIsOneOf(String ... possibilities){
+        String nextToken = peekNextToken().token;
+
+        for (String possibility : possibilities)
+            if (possibility.equals(nextToken))
+                return true;
+
+        return false;
+    }
+
+    public void peekExpectNoneOf(String ... possibilities) throws InvalidSyntaxException {
+        TokenizerMatch nextToken = peekNextToken();
+
+        for (String possibility : possibilities)
+            if (possibility.equals(nextToken))
+                throw new InvalidSyntaxException("Not expected \"" + nextToken + "\" here.");
+    }
+
+
     public boolean sequenceMatches(final String sequence) {
         if ((currentIndex + sequence.length()) > source.length())
             return false;