From f72501fde2f1156a95b97d65a90df2714d20008e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 27 Mar 2025 11:04:31 +0100 Subject: [PATCH] feat(lexer): Scan empty string --- src/lexer/Lexer.kt | 11 +++++++++++ src/lexer/LexerPosition.kt | 5 +++++ src/lexer/Token.kt | 8 ++++++++ src/lexer/TokenType.kt | 5 +++++ tests/lexer/LexerScanTest.kt | 16 ++++++++++++++++ 5 files changed, 45 insertions(+) create mode 100644 src/lexer/Lexer.kt create mode 100644 src/lexer/LexerPosition.kt create mode 100644 src/lexer/Token.kt create mode 100644 src/lexer/TokenType.kt create mode 100644 tests/lexer/LexerScanTest.kt diff --git a/src/lexer/Lexer.kt b/src/lexer/Lexer.kt new file mode 100644 index 0000000..93a9d5c --- /dev/null +++ b/src/lexer/Lexer.kt @@ -0,0 +1,11 @@ +package lexer + +class Lexer { + fun scan(source: String): List { + if (source.isEmpty()) { + return listOf(Token(TokenType.EOF, LexerPosition(1, 1, 0))) + } + + return emptyList() + } +} diff --git a/src/lexer/LexerPosition.kt b/src/lexer/LexerPosition.kt new file mode 100644 index 0000000..2ca10bc --- /dev/null +++ b/src/lexer/LexerPosition.kt @@ -0,0 +1,5 @@ +package lexer + +class LexerPosition(val line: Int, val column: Int, val length: Int) { + // Do nothing +} diff --git a/src/lexer/Token.kt b/src/lexer/Token.kt new file mode 100644 index 0000000..e7f1727 --- /dev/null +++ b/src/lexer/Token.kt @@ -0,0 +1,8 @@ +package lexer + +class Token( + val type: TokenType, + val position: LexerPosition +) { + // Do nothing +} diff --git a/src/lexer/TokenType.kt b/src/lexer/TokenType.kt new file mode 100644 index 0000000..bace57e --- /dev/null +++ b/src/lexer/TokenType.kt @@ -0,0 +1,5 @@ +package lexer + +enum class TokenType { + EOF +} diff --git a/tests/lexer/LexerScanTest.kt b/tests/lexer/LexerScanTest.kt new file mode 100644 index 0000000..d2ff248 --- /dev/null +++ b/tests/lexer/LexerScanTest.kt @@ -0,0 +1,16 @@ +package be.ugent.logprog.lexer + +import lexer.Lexer +import lexer.TokenType +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals + +class LexerScanTest { + @Test + fun scan_emptyString_returnsEOF() { + val lexer = Lexer() + val tokens = lexer.scan("") + assertEquals(1, tokens.size) + assertEquals(TokenType.EOF, tokens[0].type) + } +}