From d078ad2ad09fb504b46f07b75df4fe365a59c6a4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 14 Apr 2017 17:41:53 +0100 Subject: Always return end tokens from end of token iterator --- .../internal/styles/parsing/StyleMapParser.java | 2 +- .../styles/parsing/StyleMappingTokeniser.java | 13 +++++++--- .../internal/styles/parsing/TokenIterator.java | 30 +++++++++++++--------- 3 files changed, 28 insertions(+), 17 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java index bb8c0cc..5113a4f 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java @@ -41,7 +41,7 @@ public class StyleMapParser { } private static Consumer parseStyleMapping(String line) { - TokenIterator tokens = new TokenIterator<>(StyleMappingTokeniser.tokenise(line)); + TokenIterator tokens = StyleMappingTokeniser.tokenise(line); BiConsumer documentMatcher = DocumentMatcherParser.parse(tokens); diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java index b0b44c3..9625d24 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java @@ -5,7 +5,14 @@ import java.util.List; import static org.zwobble.mammoth.internal.util.Lists.list; public class StyleMappingTokeniser { - public static List> tokenise(String line) { + public static TokenIterator tokenise(String line) { + return new TokenIterator<>( + tokeniseToList(line), + new Token<>(line.length(), TokenType.EOF, "") + ); + } + + public static List> tokeniseToList(String line) { String stringPrefix = "'(?:(?:\\\\.|[^'])*)"; String identifierCharacter = "(?:[a-zA-Z\\-_]|\\\\.)"; @@ -20,8 +27,6 @@ public class StyleMappingTokeniser { RegexTokeniser.rule(TokenType.INTEGER, "[0-9]+") ) ); - List> tokens = tokeniser.tokenise(line); - tokens.add(new Token<>(line.length(), TokenType.EOF, "")); - return tokens; + return tokeniser.tokenise(line); } } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenIterator.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenIterator.java index d75e896..69ad7a7 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenIterator.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenIterator.java @@ -6,21 +6,19 @@ import static org.zwobble.mammoth.internal.styles.parsing.LineParseException.lin public class TokenIterator { private final List> tokens; + private final Token end; private int index; - public TokenIterator(List> tokens) { + public TokenIterator(List> tokens, Token end) { this.tokens = tokens; + this.end = end; this.index = 0; } public boolean isNext(int offset, T tokenType, String value) { int tokenIndex = index + offset; - if (tokenIndex < tokens.size()) { - Token token = tokens.get(tokenIndex); - return token.getTokenType().equals(tokenType) && token.getValue().equals(value); - } else { - return false; - } + Token token = getToken(tokenIndex); + return token.getTokenType().equals(tokenType) && token.getValue().equals(value); } public boolean isNext(T tokenType, String value) { @@ -37,17 +35,17 @@ public class TokenIterator { } public T peekTokenType() { - return tokens.get(index).getTokenType(); + return getToken(index).getTokenType(); } public Token next() { - Token token = tokens.get(index); + Token token = getToken(index); index += 1; return token; } public Token next(T type) { - Token token = tokens.get(index); + Token token = getToken(index); if (token.getTokenType().equals(type)) { index += 1; return token; @@ -65,7 +63,7 @@ public class TokenIterator { } public void skip(T tokenType) { - Token token = tokens.get(index); + Token token = getToken(index); if (!token.getTokenType().equals(tokenType)) { throw unexpectedTokenType(tokenType, token); } @@ -73,7 +71,7 @@ public class TokenIterator { } public void skip(T tokenType, String tokenValue) { - Token token = tokens.get(index); + Token token = getToken(index); if (!token.getTokenType().equals(tokenType)) { throw unexpectedTokenType(tokenType, token); } @@ -100,6 +98,14 @@ public class TokenIterator { } } + private Token getToken(int index) { + if (index < tokens.size()) { + return tokens.get(index); + } else { + return end; + } + } + public interface Action { void run(); } -- cgit v1.2.3