diff options
| author | hachem <im@hachem.wtf> | 2026-09-08 12:00:49 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-09-08 12:00:49 +0200 |
| commit | 9d47486aac9cd1a4422b78ee273b7a27bf7b733a (patch) | |
| tree | a015067fe963f3a24e8f37a8b9cd581540b3bb8c /src/lexer.h | |
| parent | 21be45a904a0afc767214298721bd2bbce19a054 (diff) | |
refactor: flatten src and migrate to meson
Diffstat (limited to 'src/lexer.h')
| -rw-r--r-- | src/lexer.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/lexer.h b/src/lexer.h new file mode 100644 index 0000000..73de02f --- /dev/null +++ b/src/lexer.h @@ -0,0 +1,82 @@ +#pragma once + +#include <stddef.h> +#include <stdint.h> + +enum TokenType +{ + TOKEN_EOF, + TOKEN_IDENTIFIER, + TOKEN_INTEGER, + TOKEN_FLOAT, + TOKEN_STRING, + TOKEN_CHAR, + + TOKEN_CONST, + TOKEN_DATA, + TOKEN_PROC, + TOKEN_ENUM, + TOKEN_STRUCT, + TOKEN_STACK, + TOKEN_IF, + TOKEN_ELSE, + TOKEN_GOTO, + TOKEN_SYSCALL, + TOKEN_BYTE, + TOKEN_WORD, + TOKEN_DWORD, + TOKEN_QWORD, + TOKEN_SIGNED, + + TOKEN_EQUAL, + TOKEN_PLUS, + TOKEN_MINUS, + TOKEN_STAR, + TOKEN_SLASH, + TOKEN_PERCENT, + TOKEN_CARET, + TOKEN_BANG, + TOKEN_LESS, + TOKEN_GREATER, + TOKEN_DOT, + TOKEN_COMMA, + TOKEN_COLON, + TOKEN_LEFT_PAREN, + TOKEN_RIGHT_PAREN, + TOKEN_LEFT_BRACKET, + TOKEN_RIGHT_BRACKET, + TOKEN_LEFT_BRACE, + TOKEN_RIGHT_BRACE, + + TOKEN_EQUAL_EQUAL, + TOKEN_BANG_EQUAL, + TOKEN_PLUS_EQUAL, + TOKEN_MINUS_EQUAL, + TOKEN_STAR_EQUAL, + TOKEN_SLASH_EQUAL, + TOKEN_PERCENT_EQUAL, + TOKEN_LESS_EQUAL, + TOKEN_GREATER_EQUAL, + + TOKEN_UNKNOWN, +}; + +struct Token +{ + enum TokenType type; + const char* start; + size_t length; + uint32_t line; +}; + +struct Lexer +{ + const char* name; + const char* source; + const char* current; + uint32_t line; +}; + +struct Lexer create_lexer(const char* source); +struct Token scan_token(struct Lexer* lexer); +const char* token_type_name(enum TokenType type); |
