diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java index 929b516..8e70291 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java @@ -19,6 +19,8 @@ class Tokenizer { while (!iterator.isEnd()) { if (trySkipWhitespace(iterator)) { // Skip whitespace. + } else if (trySkipComment(iterator)) { + // Skip comments. } else { var token = tokenizeToken(iterator); if (token.isPresent()) { @@ -38,6 +40,15 @@ class Tokenizer { return new Tokens(tokens, tokenEnd); } + private static boolean trySkipComment(CharacterIterator iterator) { + if (!"//".contentEquals(iterator.peekSequence(2)) || "///".contentEquals(iterator.peekSequence(3))) { + return false; + } + + skipToEndOfLine(iterator); + return true; + } + private static Optional<Token> tokenizeToken(CharacterIterator iterator) { var identifierOrKeyword = tokenizeIdentifierOrKeyword(iterator); if (identifierOrKeyword.isPresent()) { @@ -82,16 +93,20 @@ class Tokenizer { } var start = iterator.position(); + skipToEndOfLine(iterator); + var end = iterator.position(); + + var token = new Token(TokenType.DOC_COMMENT, start.to(end)); + return Optional.of(token); + } + + private static void skipToEndOfLine(CharacterIterator iterator) { while (!iterator.isEnd() && iterator.peek() != '\n') { iterator.skip(); } if (iterator.peek() == '\n') { iterator.skip(); } - var end = iterator.position(); - - var token = new Token(TokenType.DOC_COMMENT, start.to(end)); - return Optional.of(token); } private static Optional<Token> tokenizeIdentifierOrKeyword(CharacterIterator iterator) { |
