summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-05-03 11:48:08 +0100
committerMichael Williamson <mike@zwobble.org>2026-05-03 11:48:17 +0100
commita4f4cb576ca6540060345785ba2a40c71f1f11cb (patch)
treec7fd065a749849ee1272357a82985d2147532f9d /src
parent8b71116229a45965ffae361b6f765ff67c913119 (diff)
Tokenize square brackets
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java10
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java22
3 files changed, 34 insertions, 0 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 da9a37f..9c11815 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java
@@ -14,4 +14,6 @@ enum TokenType {
SYMBOL_BRACE_CLOSE,
SYMBOL_COLON,
SYMBOL_SEMICOLON,
+ SYMBOL_SQUARE_OPEN,
+ SYMBOL_SQUARE_CLOSE,
}
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 d09ed64..5ec42e6 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java
@@ -125,6 +125,16 @@ class Tokenizer {
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();
}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java
index 698a70d..64e64fa 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java
@@ -107,6 +107,28 @@ public class TokenizerTests {
}
@Test
+ public void symbolSquareOpenIsTokenized() {
+ var sourceText = SourceText.fromString("<string>", "[");
+
+ var tokens = Tokenizer.tokenize(sourceText);
+
+ assertThat(tokens.tokens(), isSequence(
+ equalTo(new Token(TokenType.SYMBOL_SQUARE_OPEN, sourceRange(sourceText, 0, 1)))
+ ));
+ }
+
+ @Test
+ public void symbolSquareCloseIsTokenized() {
+ var sourceText = SourceText.fromString("<string>", "]");
+
+ var tokens = Tokenizer.tokenize(sourceText);
+
+ assertThat(tokens.tokens(), isSequence(
+ equalTo(new Token(TokenType.SYMBOL_SQUARE_CLOSE, sourceRange(sourceText, 0, 1)))
+ ));
+ }
+
+ @Test
public void symbolColonIsTokenized() {
var sourceText = SourceText.fromString("<string>", ":");