#ifndef zre_lexer_h #define zre_lexer_h typedef enum { TOKEN_EOF, TOKEN_IDENTIFIER, TOKEN_INT_LITERAL, TOKEN_UINT_LITERAL, TOKEN_FLOAT_LITERAL, TOKEN_STRING_LITERAL, TOKEN_TYPE_INT, TOKEN_TYPE_NAT, TOKEN_TYPE_REAL, TOKEN_TYPE_STR, TOKEN_KEYWORD_PLEX, TOKEN_KEYWORD_FN, TOKEN_KEYWORD_LET, TOKEN_KEYWORD_CONST, TOKEN_KEYWORD_IF, TOKEN_KEYWORD_ELSE, TOKEN_KEYWORD_WHILE, TOKEN_KEYWORD_FOR, TOKEN_KEYWORD_RETURN, TOKEN_KEYWORD_USE, TOKEN_KEYWORD_INIT, TOKEN_KEYWORD_THIS, TOKEN_KEYWORD_PRINT, TOKEN_KEYWORD_NIL, TOKEN_KEYWORD_TRUE, TOKEN_KEYWORD_FALSE, TOKEN_OPERATOR_IS, TOKEN_OPERATOR_NOT, TOKEN_OPERATOR_AND, TOKEN_OPERATOR_OR, TOKEN_BANG, TOKEN_BANG_EQ, TOKEN_EQ, TOKEN_EQ_EQ, TOKEN_GT, TOKEN_LT, TOKEN_GTE, TOKEN_LTE, TOKEN_DOT, TOKEN_COMMA, TOKEN_COLON, TOKEN_SEMICOLON, TOKEN_PLUS, TOKEN_MINUS, TOKEN_STAR, TOKEN_SLASH, TOKEN_LPAREN, TOKEN_RPAREN, TOKEN_LBRACE, TOKEN_RBRACE, TOKEN_LBRACKET, TOKEN_RBRACKET, TOKEN_ERROR } TokenType; typedef struct { TokenType type; const char *start; int length; int line; } Token; void initLexer(const char *source); Token nextToken(); #endif