From e7f69c8fbbbcbddde84933b2becd91e787d1ac63 Mon Sep 17 00:00:00 2001 From: Johnny Richard Date: Fri, 11 Apr 2025 01:15:01 +0200 Subject: Intial commit Signed-off-by: Johnny Richard --- src/lexer.h | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/lexer.h (limited to 'src/lexer.h') diff --git a/src/lexer.h b/src/lexer.h new file mode 100644 index 0000000..bac1d6a --- /dev/null +++ b/src/lexer.h @@ -0,0 +1,74 @@ +#ifndef LEXER_H +#define LEXER_H +#include "string_view.h" + + +typedef enum token_kind { + TOKEN_KW_PUSH, + TOKEN_KW_DUP, + TOKEN_KW_COPY, + TOKEN_KW_SWAP, + TOKEN_KW_DROP, + TOKEN_KW_SLIDE, + TOKEN_KW_ADD, + TOKEN_KW_SUB, + TOKEN_KW_MUL, + TOKEN_KW_DIV, + TOKEN_KW_MOD, + TOKEN_KW_STORE, + TOKEN_KW_LOAD, + TOKEN_KW_CALL, + TOKEN_KW_RET, + TOKEN_KW_JMP, + TOKEN_KW_JMPZ, + TOKEN_KW_JMPN, + TOKEN_KW_PRINTI, + TOKEN_KW_PRINTC, + TOKEN_KW_READI, + TOKEN_KW_READC, + TOKEN_KW_END, + TOKEN_EOS, + TOKEN_NUMBER, + TOKEN_IDENT, + TOKEN_COLON, + TOKEN_UNKOWN, + TOKEN_EOF +} token_kind_t; + +typedef struct lex_loc { + size_t offset; + size_t lineoffset; + size_t lineno; +} lex_loc_t; + +typedef struct token { + token_kind_t kind; + string_view_t value; + lex_loc_t loc; +} token_t; + +typedef struct lexer { + char *file_name; + string_view_t source; + lex_loc_t loc; +} lexer_t; + +void +lexer_init(lexer_t *lexer, char *file_name); + +bool +lexer_is_eof(lexer_t *lexer); + +char +lexer_current_char(lexer_t *lexer); + +char +lexer_next_char(lexer_t *lexer); + +void +lexer_next_token(lexer_t *lexer, token_t *token); + +char * +token_to_cstr(token_kind_t kind); + +#endif /* LEXER_H */ -- cgit v1.2.3