From 7c03dc797ea3ac5f41ced2a79b5c254557355a84 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 13 Jun 2026 21:52:06 +0100 Subject: Add "import" and "from" keywords --- .../hobgoblin/compiler/parser/TokenType.java | 2 ++ .../hobgoblin/compiler/parser/Tokenizer.java | 4 ++++ .../hobgoblin/compiler/parser/TokenizerTests.java | 22 ++++++++++++++++++++++ 3 files changed, 28 insertions(+) (limited to 'src') 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 85ac1b9..f7242e2 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/TokenType.java @@ -7,6 +7,8 @@ enum TokenType { WHITESPACE, KEYWORD_FIELD, + KEYWORD_FROM, + KEYWORD_IMPORT, KEYWORD_NATIVE, KEYWORD_STRUCT, KEYWORD_SUM, 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 8e70291..7db0806 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Tokenizer.java @@ -124,6 +124,10 @@ class Tokenizer { TokenType tokenType; if (CharSequence.compare(sourceRange.charSequence(), "field") == 0) { tokenType = TokenType.KEYWORD_FIELD; + } else if (CharSequence.compare(sourceRange.charSequence(), "from") == 0) { + tokenType = TokenType.KEYWORD_FROM; + } else if (CharSequence.compare(sourceRange.charSequence(), "import") == 0) { + tokenType = TokenType.KEYWORD_IMPORT; } else if (CharSequence.compare(sourceRange.charSequence(), "native") == 0) { tokenType = TokenType.KEYWORD_NATIVE; } else if (CharSequence.compare(sourceRange.charSequence(), "struct") == 0) { 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 1764a41..2b624ab 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/parser/TokenizerTests.java @@ -29,6 +29,28 @@ public class TokenizerTests { )); } + @Test + public void keywordFromIsTokenized() { + var sourceText = SourceText.fromString("", "from"); + + var tokens = Tokenizer.tokenize(sourceText); + + assertThat(tokens.tokens(), isSequence( + equalTo(new Token(TokenType.KEYWORD_FROM, sourceRange(sourceText, 0, 4))) + )); + } + + @Test + public void keywordImportIsTokenized() { + var sourceText = SourceText.fromString("", "import"); + + var tokens = Tokenizer.tokenize(sourceText); + + assertThat(tokens.tokens(), isSequence( + equalTo(new Token(TokenType.KEYWORD_IMPORT, sourceRange(sourceText, 0, 6))) + )); + } + @Test public void keywordNativeIsTokenized() { var sourceText = SourceText.fromString("", "native"); -- cgit v1.2.3