147 lines
3.9 KiB
C
147 lines
3.9 KiB
C
//
|
|
// 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<T>)
|
|
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
|