#ifndef RAVA_LEXER_H #define RAVA_LEXER_H #include #include #include typedef enum { RAVA_TOKEN_EOF, RAVA_TOKEN_KEYWORD_ABSTRACT, RAVA_TOKEN_KEYWORD_ASSERT, RAVA_TOKEN_KEYWORD_BOOLEAN, RAVA_TOKEN_KEYWORD_BREAK, RAVA_TOKEN_KEYWORD_BYTE, RAVA_TOKEN_KEYWORD_CASE, RAVA_TOKEN_KEYWORD_CATCH, RAVA_TOKEN_KEYWORD_CHAR, RAVA_TOKEN_KEYWORD_CLASS, RAVA_TOKEN_KEYWORD_CONST, RAVA_TOKEN_KEYWORD_CONTINUE, RAVA_TOKEN_KEYWORD_DEFAULT, RAVA_TOKEN_KEYWORD_DO, RAVA_TOKEN_KEYWORD_DOUBLE, RAVA_TOKEN_KEYWORD_ELSE, RAVA_TOKEN_KEYWORD_ENUM, RAVA_TOKEN_KEYWORD_EXTENDS, RAVA_TOKEN_KEYWORD_FINAL, RAVA_TOKEN_KEYWORD_FINALLY, RAVA_TOKEN_KEYWORD_FLOAT, RAVA_TOKEN_KEYWORD_FOR, RAVA_TOKEN_KEYWORD_GOTO, RAVA_TOKEN_KEYWORD_IF, RAVA_TOKEN_KEYWORD_IMPLEMENTS, RAVA_TOKEN_KEYWORD_IMPORT, RAVA_TOKEN_KEYWORD_INSTANCEOF, RAVA_TOKEN_KEYWORD_INT, RAVA_TOKEN_KEYWORD_INTERFACE, RAVA_TOKEN_KEYWORD_LONG, RAVA_TOKEN_KEYWORD_NATIVE, RAVA_TOKEN_KEYWORD_NEW, RAVA_TOKEN_KEYWORD_PACKAGE, RAVA_TOKEN_KEYWORD_PRIVATE, RAVA_TOKEN_KEYWORD_PROTECTED, RAVA_TOKEN_KEYWORD_PUBLIC, RAVA_TOKEN_KEYWORD_RETURN, RAVA_TOKEN_KEYWORD_SHORT, RAVA_TOKEN_KEYWORD_STATIC, RAVA_TOKEN_KEYWORD_STRICTFP, RAVA_TOKEN_KEYWORD_SUPER, RAVA_TOKEN_KEYWORD_SWITCH, RAVA_TOKEN_KEYWORD_SYNCHRONIZED, RAVA_TOKEN_KEYWORD_THIS, RAVA_TOKEN_KEYWORD_THROW, RAVA_TOKEN_KEYWORD_THROWS, RAVA_TOKEN_KEYWORD_TRANSIENT, RAVA_TOKEN_KEYWORD_TRY, RAVA_TOKEN_KEYWORD_VOID, RAVA_TOKEN_KEYWORD_VOLATILE, RAVA_TOKEN_KEYWORD_WHILE, RAVA_TOKEN_LITERAL_TRUE, RAVA_TOKEN_LITERAL_FALSE, RAVA_TOKEN_LITERAL_NULL, RAVA_TOKEN_LITERAL_INTEGER, RAVA_TOKEN_LITERAL_LONG, RAVA_TOKEN_LITERAL_FLOAT, RAVA_TOKEN_LITERAL_DOUBLE, RAVA_TOKEN_LITERAL_CHARACTER, RAVA_TOKEN_LITERAL_STRING, RAVA_TOKEN_IDENTIFIER, RAVA_TOKEN_LPAREN, RAVA_TOKEN_RPAREN, RAVA_TOKEN_LBRACE, RAVA_TOKEN_RBRACE, RAVA_TOKEN_LBRACKET, RAVA_TOKEN_RBRACKET, RAVA_TOKEN_SEMICOLON, RAVA_TOKEN_COMMA, RAVA_TOKEN_DOT, RAVA_TOKEN_ELLIPSIS, RAVA_TOKEN_AT, RAVA_TOKEN_COLONCOLON, RAVA_TOKEN_ASSIGN, RAVA_TOKEN_GT, RAVA_TOKEN_LT, RAVA_TOKEN_BANG, RAVA_TOKEN_TILDE, RAVA_TOKEN_QUESTION, RAVA_TOKEN_COLON, RAVA_TOKEN_ARROW, RAVA_TOKEN_EQUAL, RAVA_TOKEN_GE, RAVA_TOKEN_LE, RAVA_TOKEN_NE, RAVA_TOKEN_AND, RAVA_TOKEN_OR, RAVA_TOKEN_INC, RAVA_TOKEN_DEC, RAVA_TOKEN_PLUS, RAVA_TOKEN_MINUS, RAVA_TOKEN_STAR, RAVA_TOKEN_SLASH, RAVA_TOKEN_AMP, RAVA_TOKEN_PIPE, RAVA_TOKEN_CARET, RAVA_TOKEN_PERCENT, RAVA_TOKEN_LSHIFT, RAVA_TOKEN_RSHIFT, RAVA_TOKEN_URSHIFT, RAVA_TOKEN_PLUSASSIGN, RAVA_TOKEN_MINUSASSIGN, RAVA_TOKEN_STARASSIGN, RAVA_TOKEN_SLASHASSIGN, RAVA_TOKEN_ANDASSIGN, RAVA_TOKEN_ORASSIGN, RAVA_TOKEN_CARETASSIGN, RAVA_TOKEN_PERCENTASSIGN, RAVA_TOKEN_LSHIFTASSIGN, RAVA_TOKEN_RSHIFTASSIGN, RAVA_TOKEN_URSHIFTASSIGN, RAVA_TOKEN_ERROR } RavaTokenType_e; typedef union { int64_t int_value; double float_value; char *string_value; char char_value; } RavaLiteralValue_u; typedef struct { RavaTokenType_e type; char *lexeme; int line; int column; RavaLiteralValue_u value; } RavaToken_t; typedef struct { const char *source; size_t source_length; size_t current; size_t start; int line; int column; int start_column; char *error_message; } RavaLexer_t; RavaLexer_t* rava_lexer_create(const char *source); void rava_lexer_destroy(RavaLexer_t *lexer); RavaToken_t* rava_lexer_next_token(RavaLexer_t *lexer); void rava_token_destroy(RavaToken_t *token); #endif