#ifndef ZRE_PARSER_H #define ZRE_PARSER_H #include "common.h" #include typedef enum TokenType { /* Single char tokens */ TOKEN_LEFT_PAREN, TOKEN_RIGHT_PAREN, TOKEN_LEFT_BRACE, TOKEN_RIGHT_BRACE, TOKEN_SEMICOLON, TOKEN_EQUALS, TOKEN_DOT, /* Literals */ TOKEN_IDENTIFIER, TOKEN_STRING, TOKEN_FLOAT, TOKEN_U8, TOKEN_I8, TOKEN_U16, TOKEN_I16, TOKEN_U64, TOKEN_I64, TOKEN_INT, TOKEN_UINT, /* TOKEN_ARRAY, */ /* TOKEN_MAP, */ TOKEN_FALSE, TOKEN_TRUE, TOKEN_NULL, TOKEN_EOF, TOKEN_ERROR, /* Operators */ TOKEN_ADD, TOKEN_SUB, TOKEN_MUL, TOKEN_DIV, TOKEN_MOD, TOKEN_GT, TOKEN_LT, TOKEN_EQ, TOKEN_GE, TOKEN_LE, TOKEN_NE, TOKEN_AND, TOKEN_OR, TOKEN_XOR, TOKEN_SHIFTRIGHT, TOKEN_SHIFTLEFT, /* Keywords */ TOKEN_FN, TOKEN_TO, TOKEN_IN, TOKEN_IS, TOKEN_AS, TOKEN_USE, TOKEN_IF, TOKEN_ELSE, TOKEN_DEFAULT, TOKEN_FOR, TOKEN_TRY, TOKEN_CATCH, TOKEN_WHILE, TOKEN_DO, TOKEN_EXIT, TOKEN_SWITCH, TOKEN_RETURN, TOKEN_CONST, TOKEN_TYPE, TOKEN_THIS, TOKEN_YIELD, TOKEN_CASE, TOKEN_ASSERT, TOKEN_BREAK, TOKEN_LET, TOKEN_PRINT, TOKEN_TO_S, } TokenType; #define PRINT_TOKEN_CASE(token_suffix) \ case token_suffix: \ printf("" #token_suffix " %s line_no=%d\n", str, t.line); \ break; typedef struct Token Token; struct Token { TokenType type; char *start; int32_t length; int32_t line; }; typedef struct SourceCode SourceCode; struct SourceCode { size_t size; char *buf; int count; }; typedef struct TokenMap TokenMap; struct TokenMap { struct TokenMap* next; char* keyword; TokenType token; }; void initTokenMap(); void initTokenizer (char *src); void printToken (Token t); Token nextToken(); #endif