Separate engine and game
This commit is contained in:
47
engine/breeze/utils/tokenizer.c
Normal file
47
engine/breeze/utils/tokenizer.c
Normal file
@@ -0,0 +1,47 @@
|
||||
#include "tokenizer.h"
|
||||
|
||||
Tokenizer initTokenizer(const char *source) {
|
||||
int line = source ? 1 : 0;
|
||||
return (Tokenizer) {source, line};
|
||||
}
|
||||
|
||||
static bool isWhitespace(char c) {
|
||||
switch (c) {
|
||||
case '\n':
|
||||
case ' ':
|
||||
case '\r':
|
||||
case '\t':
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static void skipWhitespace(Tokenizer *tokenizer) {
|
||||
while (1) {
|
||||
char c = *tokenizer->current;
|
||||
if (c == '\n') {
|
||||
tokenizer->line++;
|
||||
continue;
|
||||
}
|
||||
if (!isWhitespace(c))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Token scanToken(Tokenizer *tokenizer) {
|
||||
skipWhitespace(tokenizer);
|
||||
Token token = {tokenizer->current, 0, tokenizer->line};
|
||||
|
||||
if (*tokenizer->current == '\0') {
|
||||
token.start = NULL;
|
||||
return token;
|
||||
}
|
||||
|
||||
while (!isWhitespace(*tokenizer->current) || *tokenizer->current != '\0') {
|
||||
tokenizer->current++;
|
||||
}
|
||||
token.length = (int) (tokenizer->current - token.start);
|
||||
|
||||
return token;
|
||||
}
|
||||
Reference in New Issue
Block a user