X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=javainspect.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Ftokenizer%2FTokenizer.java;h=8a42776de29ddb27208181cba7e89eb331deaae6;hp=97f12242c7019e03bcb0d43fac7f167e2d535093;hb=9811fe796d6f549151ab904714e1a65ff2839ee2;hpb=b11a3d9201e6fa8b62fa2fdfd5b99ade27297e3f diff --git a/src/main/java/eu/svjatoslav/inspector/tokenizer/Tokenizer.java b/src/main/java/eu/svjatoslav/inspector/tokenizer/Tokenizer.java index 97f1224..8a42776 100644 --- a/src/main/java/eu/svjatoslav/inspector/tokenizer/Tokenizer.java +++ b/src/main/java/eu/svjatoslav/inspector/tokenizer/Tokenizer.java @@ -2,12 +2,15 @@ package eu.svjatoslav.inspector.tokenizer; import java.util.ArrayList; import java.util.List; +import java.util.Stack; public class Tokenizer { private final List terminators = new ArrayList(); private final String source; + Stack tokenIndexes = new Stack(); + private int currentIndex = 0; public Tokenizer(final String source) { @@ -19,7 +22,15 @@ public class Tokenizer { terminators.add(new Terminator(terminator, empty)); } + public void expectToken(final String value) throws InvalidSyntaxException { + final TokenizerMatch match = getToken(); + if (!value.equals(match.token)) + throw new InvalidSyntaxException("Expected \"" + value + + "\" but got \"" + match.token + "\" instead."); + } + public TokenizerMatch getToken() { + tokenIndexes.push(currentIndex); final StringBuffer result = new StringBuffer(); while (true) { @@ -55,6 +66,23 @@ public class Tokenizer { } + public boolean isNextToken(final String token) { + if (token.equals(getToken().token)) + return true; + + rollbackToken(); + return false; + } + + public void rollbackToken() { + currentIndex = tokenIndexes.pop(); + } + + public void skipUtilEnd() { + tokenIndexes.push(currentIndex); + currentIndex = source.length(); + } + public boolean terminatorMatches(final Terminator terminator) { if ((currentIndex + terminator.value.length()) > source.length()) return false;