// // Created by Natuie on 2025/3/22. // #ifndef VETY_LEXER_H #define VETY_LEXER_H typedef enum { TOKEN_EOF, // 文件结束 TOKEN_IDENTIFIER, // 标识符 TOKEN_INT, // 整数 TOKEN_FLOAT, // 浮点数 TOKEN_STRING, // 字符串 TOKEN_KEYWORD, // 关键字 TOKEN_ASSIGN, // 赋值 TOKEN_PLUS, // 加号 TOKEN_MINUS, // 减号 TOKEN_MUL, // 乘号 TOKEN_DIV, // 除号 TOKEN_MOD, // 取模 TOKEN_PLUS_PLUS, // 自增 TOKEN_MINUS_MINUS, // 自减 TOKEN_PLUS_ASSIGN, // += TOKEN_MINUS_ASSIGN, // -= TOKEN_MUL_ASSIGN, // *= TOKEN_DIV_ASSIGN, // /= TOKEN_MOD_ASSIGN, // %= TOKEN_LPAREN, // 左括号 TOKEN_RPAREN, // 右括号 TOKEN_LBRACE, // 左花括号 TOKEN_RBRACE, // 右花括号 TOKEN_LBRACKET, // 左中括号 TOKEN_RBRACKET, // 右中括号 TOKEN_COMMA, // 逗号 TOKEN_SEMICOLON, // 分号 TOKEN_COLON, // 冒号 TOKEN_DOT, // 点号 TOKEN_QUESTION, // 问号 TOKEN_LT, // 小于号 TOKEN_GT, // 大于号 TOKEN_LE, // 小于等于号 TOKEN_GE, // 大于等于号 TOKEN_EQ, // 等于号 TOKEN_EQ_EQ, // 等于等于号 TOKEN_NE, // 不等于号 TOKEN_AND, // 与运算符 TOKEN_OR, // 或运算符 TOKEN_NOT, // 非运算符 TOKEN_BITAND, // 按位与运算符 TOKEN_BITOR, // 按位或运算符 TOKEN_BITXOR, // 按位异或运算符 TOKEN_TILDE, // ~ TOKEN_SHL, // 左移运算符 TOKEN_SHR, // 右移运算符 TOKEN_BITAND_ASSIGN, // &= TOKEN_BITOR_ASSIGN, // |= TOKEN_BITXOR_ASSIGN, // ^= TOKEN_SHL_ASSIGN, // <<= TOKEN_SHR_ASSIGN, // >>= TOKEN_IF, // if 关键字 TOKEN_ELSE, // else 关键字 TOKEN_WHILE, // while 关键字 TOKEN_FOR, // for 关键字 TOKEN_RETURN, // return 关键字 TOKEN_BREAK, // break 关键字 TOKEN_CONTINUE, // continue 关键字 TOKEN_LET, // let 关键字 TOKEN_CONST, // const 关键字 TOKEN_TRUE, // true 关键字 TOKEN_FALSE, // false 关键字 TOKEN_NULL, // null 关键字 TOKEN_IMPORT, // import 关键字 TOKEN_AS, // as 关键字 TOKEN_IN, // in 关键字 TOKEN_NATIVE, // native 关键字 TOKEN_FUNC, // func 关键字 TOKEN_BOOL, // bool 关键字 TOKEN_MAP, // map 关键字 TOKEN_ARRAY, // array 关键字 // 类型关键字 TOKEN_TYPE_I8, // i8类型 TOKEN_TYPE_I16, // i16类型 TOKEN_TYPE_I32, // i32类型 TOKEN_TYPE_I64, // i64类型 TOKEN_TYPE_U8, // u8类型 TOKEN_TYPE_U16, // u16类型 TOKEN_TYPE_U32, // u32类型 TOKEN_TYPE_U64, // u64类型 TOKEN_TYPE_F32, // f32类型 TOKEN_TYPE_F64, // f64类型 TOKEN_TYPE_ANY, // any类型 TOKEN_TYPE_VOID, // void类型 TOKEN_INT_LITERAL, // 整数字面量 TOKEN_FLOAT_LITERAL, // 浮点数字面量 TOKEN_STRING_LITERAL, // 字符串字面量 TOKEN_BOOL_LITERAL, // 布尔字面量 TOKEN_STAR, // 星号 TOKEN_SLASH, // 斜杠 TOKEN_BANG, // 感叹号 TOKEN_AT, // 注解符号 TOKEN_TRY, // try关键字 TOKEN_CATCH, // catch关键字 TOKEN_ERROR, // 错误 TOKEN_THROW, // throw关键字 } TokenType; typedef struct { TokenType type; char value[256]; int line; int column; } Token; typedef struct { char *source; int length; int line; int column; int current_pos; } Lexer; void skip_whitespace_and_comments(Lexer *lexer); Token read_identifier(Lexer *lexer); Token read_number(Lexer *lexer); Token read_string(Lexer *lexer); void lexer_init(Lexer *lexer, char *source); void lexer_free(Lexer *lexer); Token lexer_next_token(Lexer *lexer); Token lexer_back_token(Lexer *lexer); #endif //VETY_LEXER_H