// // Created by Natuie on 2025/3/22. // #ifndef VETY_AST_H #define VETY_AST_H // 节点类型枚举 typedef enum { // 程序结构 NODE_PROGRAM, // 程序根节点 NODE_BLOCK, // 代码块 NODE_EMPTY_BLOCK, // 空代码块 // 声明 NODE_VAR_DECL, // 变量声明 NODE_VAR_DECL_LIST, // 多变量声明列表 NODE_FUNC_DECL, // 函数声明 NODE_PARAM_LIST, // 参数列表 NODE_PARAM, // 单个参数 // 语句 NODE_IF_STMT, // if语句 NODE_ELSE_IF, // else if分支 NODE_ELSE_BLOCK, // else分支 NODE_WHILE_STMT, // while循环语句 NODE_FOR_STMT, // for循环语句 NODE_FOR_INIT, // for循环初始化部分 NODE_FOR_CONDITION, // for循环条件部分 NODE_FOR_UPDATE, // for循环更新部分 NODE_BREAK_STMT, // break语句 NODE_CONTINUE_STMT, // continue语句 NODE_RETURN_STMT, // return语句 NODE_EXPR_STMT, // 表达式语句 NODE_IMPORT_STMT, // import语句 NODE_IMPORT_PATH, // import路径 NODE_IMPORT_ALIAS, // import别名 NODE_REQUEST_STMT, // 请求语句 // 表达式 NODE_BINARY_EXPR, // 二元表达式 NODE_UNARY_EXPR, // 一元表达式 NODE_POSTFIX_EXPR, // 后缀表达式 NODE_CALL_EXPR, // 函数调用 NODE_MEMBER_EXPR, // 成员访问表达式 NODE_INDEX_EXPR, // 索引表达式 NODE_TERNARY_EXPR, // 三元表达式 // 标识符和字面量 NODE_IDENTIFIER, // 标识符 NODE_INT_LITERAL, // 整数字面量 NODE_FLOAT_LITERAL, // 浮点数字面量 NODE_STRING_LITERAL, // 字符串字面量 NODE_BOOL_LITERAL, // 布尔字面量 // 复合类型 NODE_ARRAY_TYPE, // 数组类型 NODE_ARRAY_LITERAL, // 数组字面量 NODE_ARRAY_ITEM, // 数组元素 NODE_MAP_LITERAL, // map字面量 NODE_MAP_ENTRY, // map条目 // 类型系统 NODE_TYPE_IDENTIFIER, // 类型标识符 NODE_TYPE_GENERIC, // 泛型类型 (如Array) NODE_GENERIC_PARAMS, // 泛型参数 NODE_TYPE_UNION, // 联合类型 NODE_CAST_EXPR, // 类型转换 // 注解系统 NODE_ANNOTATION, // 注解 NODE_ANNOTATIONS, // 注解列表 NODE_POS_ARG, // 位置参数 NODE_NAMED_ARG, // 命名参数 // 错误处理 NODE_TRY_STMT, // try语句 NODE_CATCH_BLOCK, // catch块 NODE_THROW_STMT, // throw语句 NODE_ERROR_NODE, // 错误节点 } NodeType; // 操作符类型枚举 typedef enum { OP_UNKNOWN, // 算术运算符 OP_ADD, // + OP_SUB, // - OP_MUL, // * OP_DIV, // / OP_MOD, // % // 逻辑运算符 OP_AND, // and OP_OR, // or OP_NOT, // not // 比较运算符 OP_EQ, // == OP_NE, // != OP_LT, // < OP_GT, // > OP_LE, // <= OP_GE, // >= // 位运算符 OP_BITAND, // & OP_BITOR, // | OP_BITXOR, // ^ OP_BITNOT, // ~ OP_SHL, // << OP_SHR, // >> // 赋值运算符 OP_ASSIGN, // = OP_PLUS_ASSIGN, // += OP_MINUS_ASSIGN, // -= OP_MUL_ASSIGN, // *= OP_DIV_ASSIGN, // /= OP_MOD_ASSIGN, // %= OP_BITAND_ASSIGN, // &= OP_BITOR_ASSIGN, // |= OP_BITXOR_ASSIGN, // ^= OP_SHL_ASSIGN, // <<= OP_SHR_ASSIGN, // >>= // 三元运算符 OP_TERNARY, // ? : } OperatorType; typedef struct ASTNode{ int line; // 行号 int column; // 列号 int children_count; // 子节点数量 char *value; // 值 NodeType type; OperatorType op_type; // 操作符类型 struct ASTNode **children; } ASTNode; ASTNode *create_node(NodeType type); ASTNode add_child(ASTNode *parent, ASTNode *child); void set_node_position(ASTNode *node, int line, int column); #endif //VETY_AST_H