summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-14 11:01:17 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-14 11:01:29 +0100
commit95f9dc1f12d14acad47472bb20f03f0e90a98fac (patch)
tree5b51cfda8b9bf0c38e248d0db61f460744c18b86 /src/main
parent6f52cdc6a2593094652d0ff018b4cde1276a1815 (diff)
Tokenize dot dot symbol
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java102
2 files changed, 55 insertions, 48 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java b/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java
index f7242e2..8277653 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java
@@ -19,6 +19,7 @@ enum TokenType {
SYMBOL_COLON,
SYMBOL_COMMA,
SYMBOL_DOT,
+ SYMBOL_DOT_DOT,
SYMBOL_FORWARD_SLASH,
SYMBOL_SEMICOLON,
SYMBOL_SQUARE_OPEN,
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 7db0806..8acde49 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java
@@ -148,54 +148,60 @@ class Tokenizer {
TokenType tokenType;
var start = iterator.position();
- switch (iterator.peek()) {
- case '{':
- tokenType = TokenType.SYMBOL_BRACE_OPEN;
- iterator.skip();
- break;
-
- case '}':
- tokenType = TokenType.SYMBOL_BRACE_CLOSE;
- iterator.skip();
- break;
-
- case ':':
- tokenType = TokenType.SYMBOL_COLON;
- iterator.skip();
- break;
-
- case ',':
- tokenType = TokenType.SYMBOL_COMMA;
- iterator.skip();
- break;
-
- case '.':
- tokenType = TokenType.SYMBOL_DOT;
- iterator.skip();
- break;
-
- case '/':
- tokenType = TokenType.SYMBOL_FORWARD_SLASH;
- iterator.skip();
- break;
-
- case ';':
- tokenType = TokenType.SYMBOL_SEMICOLON;
- iterator.skip();
- break;
-
- case '[':
- tokenType = TokenType.SYMBOL_SQUARE_OPEN;
- iterator.skip();
- break;
-
- case ']':
- tokenType = TokenType.SYMBOL_SQUARE_CLOSE;
- iterator.skip();
- break;
-
- default:
- return Optional.empty();
+ if ("..".contentEquals(iterator.peekSequence(2))) {
+ tokenType = TokenType.SYMBOL_DOT_DOT;
+ iterator.skip();
+ iterator.skip();
+ } else {
+ switch (iterator.peek()) {
+ case '{':
+ tokenType = TokenType.SYMBOL_BRACE_OPEN;
+ iterator.skip();
+ break;
+
+ case '}':
+ tokenType = TokenType.SYMBOL_BRACE_CLOSE;
+ iterator.skip();
+ break;
+
+ case ':':
+ tokenType = TokenType.SYMBOL_COLON;
+ iterator.skip();
+ break;
+
+ case ',':
+ tokenType = TokenType.SYMBOL_COMMA;
+ iterator.skip();
+ break;
+
+ case '.':
+ tokenType = TokenType.SYMBOL_DOT;
+ iterator.skip();
+ break;
+
+ case '/':
+ tokenType = TokenType.SYMBOL_FORWARD_SLASH;
+ iterator.skip();
+ break;
+
+ case ';':
+ tokenType = TokenType.SYMBOL_SEMICOLON;
+ iterator.skip();
+ break;
+
+ case '[':
+ tokenType = TokenType.SYMBOL_SQUARE_OPEN;
+ iterator.skip();
+ break;
+
+ case ']':
+ tokenType = TokenType.SYMBOL_SQUARE_CLOSE;
+ iterator.skip();
+ break;
+
+ default:
+ return Optional.empty();
+ }
}
var end = iterator.position();