#ifndef FZL_TOKEN_H #define FZL_TOKEN_H #include #include #include // Token type typedef enum { FZL_TOKTYPE_IMPORT, // `import` FZL_TOKTYPE_EXTERN, // `extern` FZL_TOKTYPE_TYPEDEF, // `type` FZL_TOKTYPE_HANDLE, // `handle` FZL_TOKTYPE_STRUCT, // `struct` FZL_TOKTYPE_REFERENCE, // `ref` FZL_TOKTYPE_OUT, // `out` FZL_TOKTYPE_CLASS, // `class` FZL_TOKTYPE_NEW, // `new` FZL_TOKTYPE_FUNCTION, // `fn` FZL_TOKTYPE_RETURN, // `return` FZL_TOKTYPE_FOR, // `for` FZL_TOKTYPE_WHILE, // `while` FZL_TOKTYPE_BREAK, // `break` FZL_TOKTYPE_IF, // `if` FZL_TOKTYPE_ELSE, // `else` FZL_TOKTYPE_NAME, // abc FZL_TOKTYPE_TYPE, // i16 FZL_TOKTYPE_DDASH, // `//` :D FZL_TOKTYPE_LPAREN, // `(` FZL_TOKTYPE_RPAREN, // `)` FZL_TOKTYPE_LBRACE, // `{` FZL_TOKTYPE_RBRACE, // `}` FZL_TOKTYPE_COMMA, // `,` FZL_TOKTYPE_DOT, // `.` FZL_TOKTYPE_SEMICOLON, // `;` FZL_TOKTYPE_STR_LITERAL, // "" FZL_TOKTYPE_NUM_LITERAL, // 123 FZL_TOKTYPE_BOOL_LITERAL, // true FZL_TOKTYPE_NULL_LITERAL, // null FZL_TOKTYPE_STR_FORMAT_START, // `$` before `"` FZL_TOKTYPE_STR_FORMAT_END, // end of string formatting sequence FZL_TOKTYPE_DAMPERSAND, // `&&` FZL_TOKTYPE_DVBAR, // `||` FZL_TOKTYPE_EQEQ, // `==` FZL_TOKTYPE_REQ, // `>=` FZL_TOKTYPE_LEQ, // `<=` FZL_TOKTYPE_NEQ, // `!=` FZL_TOKTYPE_LANGLE, // `<` FZL_TOKTYPE_RANGLE, // `>` FZL_TOKTYPE_NOT, // `!` FZL_TOKTYPE_STAR, // `*` FZL_TOKTYPE_SLASH, // `/` FZL_TOKTYPE_PLUS, // `+` FZL_TOKTYPE_MINUS, // `-` FZL_TOKTYPE_CARET, // `^` FZL_TOKTYPE_PERCENT, // `%` FZL_TOKTYPE_EQ // `=` } fzl_toktype_t; // Token descriptor typedef struct { fzl_toktype_t type; size_t ln; size_t cn; bool store_value; void *value; uint16_t value_sz; char *filename; } fzl_token_t; // Allocate new token fzl_token_t *fzl_mktoken(const fzl_toktype_t type, size_t line, size_t col, void *value, size_t value_sz, char *filename); // Free token and its contents void fzl_freetoken(fzl_token_t *token); #endif // FZL_TOKEN_H