Add tokenizer

This commit is contained in:
2023-11-06 15:06:59 +01:00
parent 75d81bd21a
commit 8687b3ca19
6 changed files with 16761 additions and 13 deletions

View File

@@ -10,6 +10,8 @@ add_subdirectory(libs/raylib-4.5.0)
set(
lib_sources
libs/cute_tiled.c
src/utils/tokenizer.c
src/utils/tokenizer.h
)
set(

File diff suppressed because it is too large Load Diff

View File

@@ -3,5 +3,6 @@
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#endif //PIXELDEFENSE_COMMON_H

View File

@@ -2,6 +2,13 @@
#include <raylib.h>
#include <cute_tiled.h>
static void drawTile(Texture2D texture, int tid, int tileSetWidth, int size, Vector2 pos) {
Rectangle rec = {(tid % tileSetWidth) * size, (tid / tileSetWidth) * size, size, size};
DrawTextureRec(texture, rec, pos, WHITE);
}
int main(void) {
const int screenWidth = 1280;
@@ -54,10 +61,10 @@ int main(void) {
break;
}
if (IsKeyDown(KEY_W)) camera.target.y -= 1;
if (IsKeyDown(KEY_S)) camera.target.y += 1;
if (IsKeyDown(KEY_A)) camera.target.x -= 1;
if (IsKeyDown(KEY_D)) camera.target.x += 1;
if (IsKeyDown(KEY_W)) camera.target.y -= 20;
if (IsKeyDown(KEY_S)) camera.target.y += 20;
if (IsKeyDown(KEY_A)) camera.target.x -= 20;
if (IsKeyDown(KEY_D)) camera.target.x += 20;
if (IsKeyDown(KEY_Q)) camera.rotation--;
if (IsKeyDown(KEY_E)) camera.rotation++;
@@ -72,9 +79,7 @@ int main(void) {
for (int y = 0; y < layer->height; y++) {
for (int x = 0; x < layer->width; x++) {
int tile = layer->data[y * layer->width + x] - 1;
Rectangle rec = {(tile % tileSetWidth) * 16, (tile / tileSetWidth) * 16, 16, 16};
DrawTextureRec(terrainTexture, rec, tilePos, WHITE);
drawTile(terrainTexture, tile, tileSetWidth, 16, tilePos);
tilePos.x += 16;
}
tilePos.y += 16;
@@ -86,8 +91,7 @@ int main(void) {
while (object) {
Vector2 pos = {object->x, object->y};
int gid = object->gid - 1;
Rectangle rec = {(gid % tileSetWidth) * 16, (gid / tileSetWidth) * 16, 16, 16};
DrawTextureRec(terrainTexture, rec, pos, WHITE);
drawTile(terrainTexture, gid, tileSetWidth, 16, pos);
object = object->next;
}

47
src/utils/tokenizer.c Normal file
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;
}

20
src/utils/tokenizer.h Normal file
View File

@@ -0,0 +1,20 @@
#ifndef PIXELDEFENSE_TOKENIZER_H
#define PIXELDEFENSE_TOKENIZER_H
#include "../common.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 //PIXELDEFENSE_TOKENIZER_H