// pprocessor.h - 更新后的头文件 /** * @file pprocessor.h * @brief C语言预处理器核心数据结构与接口 */ #ifndef __SMCC_PP_H__ #define __SMCC_PP_H__ #include #include // 宏定义类型 typedef enum { MACRO_OBJECT, // 对象宏 MACRO_FUNCTION, // 函数宏 } macro_type_t; typedef VEC(cstring_t) macro_list_t; // 宏定义结构 typedef struct smcc_macro { cstring_t name; // 宏名称 macro_type_t type; // 宏类型 macro_list_t replaces; // 替换列表 macro_list_t params; // 参数列表(仅函数宏) } smcc_macro_t; // 条件编译状态 typedef enum { IFState_NONE, // 不在条件编译中 IFState_TRUE, // 条件为真 IFState_FALSE, // 条件为假 IFState_ELSE // 已经执行过else分支 } if_state_t; // 条件编译栈项 typedef struct if_stack_item { if_state_t state; int skip; // 是否跳过当前段 } if_stack_item_t; // 预处理器状态结构 typedef struct smcc_preprocessor { core_stream_t *stream; // 输出流 strpool_t strpool; // 字符串池 hashmap_t macros; // 宏定义表 VEC(if_stack_item_t) if_stack; // 条件编译栈 } smcc_pp_t; /** * @brief 初始化预处理器 * @param[out] pp 要初始化的预处理器实例 * @param[in] input 输入流对象指针 * @return output 输出流对象指针 */ core_stream_t *pp_init(smcc_pp_t *pp, core_stream_t *input); /** * @brief 执行预处理 * @param[in] pp 预处理器实例 * @return 处理结果 */ int pp_process(smcc_pp_t *pp); /** * @brief 销毁预处理器 * @param[in] pp 预处理器实例 */ void pp_drop(smcc_pp_t *pp); #endif /* __SMCC_PP_H__ */