diff options
author | Tom Willemse | 2021-08-02 18:35:10 -0700 |
---|---|---|
committer | Tom Willemse | 2021-08-02 18:35:10 -0700 |
commit | 4143259eb3df16470dc2d93371e65e53d027243b (patch) | |
tree | c64733b53a6e6344eb1443a080af5aa5ba960a6a /clox/src/scanner.c | |
parent | b131e343bb8a2b126a5370138d826d87d74fce30 (diff) | |
download | crafting-interpreters-4143259eb3df16470dc2d93371e65e53d027243b.tar.gz crafting-interpreters-4143259eb3df16470dc2d93371e65e53d027243b.zip |
Chapter 16.2
Diffstat (limited to 'clox/src/scanner.c')
-rw-r--r-- | clox/src/scanner.c | 29 |
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."); +} |