Separate engine and game

This commit is contained in:
2023-11-07 16:55:14 +01:00
parent 8a13edb838
commit 20034c96e6
922 changed files with 526 additions and 29 deletions

View 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;
}

View File

@@ -0,0 +1,20 @@
#ifndef BREEZE_TOKENIZER_H
#define BREEZE_TOKENIZER_H
#include "../defines.h"
typedef struct Token {
const char *start;
int length;
int line;
} Token;
typedef struct Tokenizer {
const char *current;
int line;
} Tokenizer;
Tokenizer initTokenizer(const char *source);
Token scanToken(Tokenizer *tokenizer);
#endif //BREEZE_TOKENIZER_H