diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-04-23 11:27:29 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-04-23 11:27:29 +0100 |
| commit | 9c84e3365661387be283ca528cea1650ea46ae1f (patch) | |
| tree | 908ab319487e821f1e5c23c0d40b4986d2d30c8b | |
| parent | 9097b3ac138a60f6e7c708d2b452f95eb75601cb (diff) | |
Tokenize field keyword
3 files changed, 15 insertions, 4 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 72b1e88..64be2d4 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java @@ -5,6 +5,7 @@ enum TokenType { IDENTIFIER, WHITESPACE, + KEYWORD_FIELD, KEYWORD_STRUCT, SYMBOL_BRACE_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 c628346..6a43a09 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java @@ -84,7 +84,9 @@ class Tokenizer { var sourceRange = start.to(end); TokenType tokenType; - if (CharSequence.compare(sourceRange.charSequence(), "struct") == 0) { + if (CharSequence.compare(sourceRange.charSequence(), "field") == 0) { + tokenType = TokenType.KEYWORD_FIELD; + } else if (CharSequence.compare(sourceRange.charSequence(), "struct") == 0) { tokenType = TokenType.KEYWORD_STRUCT; } else { tokenType = TokenType.IDENTIFIER; 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 e564e7b..68db18d 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java @@ -1,9 +1,6 @@ package org.zwobble.hobgoblin.compiler.parser; import org.junit.jupiter.api.Test; -import org.zwobble.hobgoblin.compiler.parser.Token; -import org.zwobble.hobgoblin.compiler.parser.TokenType; -import org.zwobble.hobgoblin.compiler.parser.Tokenizer; import org.zwobble.sourcetext.SourceRange; import org.zwobble.sourcetext.SourceText; @@ -22,6 +19,17 @@ public class TokenizerTests { } @Test + public void keywordFieldIsTokenized() { + var sourceText = SourceText.fromString("<string>", "field"); + + var tokens = Tokenizer.tokenize(sourceText); + + assertThat(tokens.tokens(), isSequence( + equalTo(new Token(TokenType.KEYWORD_FIELD, sourceRange(sourceText, 0, 5))) + )); + } + + @Test public void keywordStructIsTokenized() { var sourceText = SourceText.fromString("<string>", "struct"); |
