vety-language/parser/ast.h

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