From 43392fc66ab207e53a6924a2edbcd7ca0acecea8 Mon Sep 17 00:00:00 2001 From: A404M Date: Sat, 18 Jan 2025 20:42:54 +0330 Subject: initial commit --- src/compiler/lexer.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/compiler/lexer.h (limited to 'src/compiler/lexer.h') diff --git a/src/compiler/lexer.h b/src/compiler/lexer.h new file mode 100644 index 0000000..3c3bc3f --- /dev/null +++ b/src/compiler/lexer.h @@ -0,0 +1,66 @@ +#pragma once + +#include + +typedef enum LexerToken { + LEXER_TOKEN_IDENTIFIER, + LEXER_TOKEN_KEYWORD_VOID, + LEXER_TOKEN_KEYWORD_PRINT, + + LEXER_TOKEN_NUMBER, + + LEXER_TOKEN_SYMBOL, + LEXER_TOKEN_SYMBOL_EOL, + LEXER_TOKEN_SYMBOL_OPEN_PARENTHESIS, + LEXER_TOKEN_SYMBOL_CLOSE_PARENTHESIS, + LEXER_TOKEN_SYMBOL_OPEN_CURLY_BRACKET, + LEXER_TOKEN_SYMBOL_CLOSE_CURLY_BRACKET, + LEXER_TOKEN_SYMBOL_FUNCTION_ARROW, + LEXER_TOKEN_SYMBOL_COLON, + + LEXER_TOKEN_NONE, +} LexerToken; + +extern const char *LEXER_TOKEN_STRINGS[]; + +extern const char *LEXER_SYMBOL_STRINGS[]; +extern const LexerToken LEXER_SYMBOL_TOKENS[]; +extern const size_t LEXER_SYMBOL_SIZE; + +extern const char *LEXER_KEYWORD_STRINGS[]; +extern const LexerToken LEXER_KEYWORD_TOKENS[]; +extern const size_t LEXER_KEYWORD_SIZE; + +struct ParserNode; + +typedef struct LexerNode { + char *str_begin; + char *str_end; + LexerToken token; + struct ParserNode *parserNode; +} LexerNode; + +typedef struct LexerNodeArray { + LexerNode *data; + size_t size; +} LexerNodeArray; + +constexpr LexerNodeArray LEXER_NODE_ARRAY_ERROR = { + .size = -1ULL, +}; + +extern bool lexerNodeArrayIsError(LexerNodeArray array); +extern void lexerNodeArrayPrint(LexerNodeArray array); +extern void lexerNodeArrayDestroy(LexerNodeArray array); + +extern LexerNodeArray lexer(char *str); + +extern void lexerPushClear(LexerNodeArray *array, size_t *array_size, + char *iter, char **node_str_begin, + LexerToken *node_token, LexerToken token); + +extern bool isIdentifier(char c); +extern bool isNumber(char c); +extern bool isSymbol(char c); +extern bool isSingleSymbol(char c); +extern bool isSpace(char c); -- cgit v1.2.3