133 lines
3.6 KiB
C
133 lines
3.6 KiB
C
//
|
|
// 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
|