2023-12-09 17:24:41 +00:00
|
|
|
#ifndef RZ_LEXER_H
|
|
|
|
#define RZ_LEXER_H
|
|
|
|
|
|
|
|
#include "commons.h"
|
|
|
|
#include "node.h"
|
|
|
|
#include "err.h"
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
err_t* err;
|
|
|
|
char* source;
|
|
|
|
size_t cursor;
|
|
|
|
int line;
|
|
|
|
} lexer_t;
|
|
|
|
|
|
|
|
void lexer_init(lexer_t* lexer, char const* source, err_t* err);
|
|
|
|
void lexer_free(lexer_t* lexer);
|
|
|
|
|
|
|
|
node_t* lexer_try_new_next(lexer_t* lexer);
|
2023-12-09 21:59:24 +00:00
|
|
|
NodeType lexer_peek(lexer_t* lexer, int lookahead);
|
|
|
|
|
|
|
|
node_t* lexer_try_new_keyword(lexer_t* lexer, char* kw,
|
|
|
|
NodeType type, int has_value);
|
2023-12-09 17:24:41 +00:00
|
|
|
|
|
|
|
#endif
|