#ifndef UNDAR_LEXER_H #define UNDAR_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_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_OPEN, TOKEN_KEYWORD_READ, TOKEN_KEYWORD_WRITE, TOKEN_KEYWORD_REFRESH, TOKEN_KEYWORD_CLOSE, 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(); const char* tokenTypeToString(TokenType type); #endif