codebased/scirpt/lexer.h
2023-04-16 04:45:15 +02:00

41 lines
1.3 KiB
C

#ifndef LEXER_H
#define LEXER_H
#include "common/stringmap.h"
#include "scirpt/lexer.h"
#include "scirpt/token.h"
#include <stdbool.h>
#include <stddef.h>
struct ScirptLexer {
const char* text;
size_t text_length;
size_t index;
int line, col;
StringMap* keywords;
};
void scirpt_lexer_create(
ScirptLexer* lexer, const char* text, size_t text_length
);
void scirpt_lexer_destroy(ScirptLexer* lexer);
ScirptToken scirpt_lexer_level_1(ScirptLexer* lexer);
ScirptToken scirpt_lexer_level_2(ScirptLexer* lexer);
ScirptToken scirpt_lexer_level_3(ScirptLexer* lexer);
ScirptToken scirpt_lexer_skip_whitespace(ScirptLexer* lexer);
ScirptToken scirpt_lexer_id_token(ScirptLexer* lexer);
ScirptToken scirpt_lexer_int_token(ScirptLexer* lexer);
ScirptToken scirpt_lexer_string_token(ScirptLexer* lexer);
ScirptToken scirpt_lexer_dot_token(ScirptLexer* lexer);
ScirptToken scirpt_lexer_slash_token(ScirptLexer* lexer);
void scirpt_lexer_step(ScirptLexer* lexer);
ScirptPosition scirpt_lexer_pos(const ScirptLexer* lexer);
ScirptToken scirpt_lexer_token(
const ScirptLexer* lexer, ScirptTokenType type, ScirptPosition start
);
bool scirpt_lexer_current_is(const ScirptLexer* lexer, char value);
bool scirpt_lexer_done(const ScirptLexer* lexer);
char scirpt_lexer_current(const ScirptLexer* lexer);
#endif