aboutsummaryrefslogtreecommitdiffstats
path: root/clox/src/scanner.c
diff options
context:
space:
mode:
Diffstat (limited to 'clox/src/scanner.c')
-rw-r--r--clox/src/scanner.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/clox/src/scanner.c b/clox/src/scanner.c
index 2bcabb8..e125a99 100644
--- a/clox/src/scanner.c
+++ b/clox/src/scanner.c
@@ -17,3 +17,32 @@ void initScanner(const char *source) {
scanner.current = source;
scanner.line = 1;
}
+
+static bool isAtEnd() { return *scanner.current == '\0'; }
+
+static Token makeToken(TokenType type) {
+ Token token;
+ token.type = type;
+ token.start = scanner.start;
+ token.length = (int)(scanner.current - scanner.start);
+ token.line = scanner.line;
+ return token;
+}
+
+static Token errorToken(const char *message) {
+ Token token;
+ token.type = TOKEN_ERROR;
+ token.start = message;
+ token.length = (int)strlen(message);
+ token.line = scanner.line;
+ return token;
+}
+
+Token scanToken() {
+ scanner.start = scanner.current;
+
+ if (isAtEnd())
+ return makeToken(TOKEN_EOF);
+
+ return errorToken("Unexpected character.");
+}