41 lines
1.3 KiB
C
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
|