vety-language/parser/lexer.h

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