From d25b8d763d8b8a6185e384f59103d34c56c47734 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 12 Jun 2026 20:11:32 +0100 Subject: Ignore single line comments --- .../hobgoblin/compiler/parser/Tokenizer.java | 23 ++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'src/main/java') 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 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 tokenizeIdentifierOrKeyword(CharacterIterator iterator) { -- cgit v1.2.3