- 将依赖项从libcore重命名为scc_core - 更新头文件包含路径从<libcore.h>到<scc_core.h> - 保持原有功能不变 refactor(lexer): 重命名libcore为scc_core并添加词法流式解析功能 - 将依赖项从libcore重命名为scc_core - 移除不再需要的scc_lexer_token结构体定义 - 重命名struct cc_lexer为struct scc_lexer - 添加scc_lexer_stream_t流式解析器相关定义和实现 - 新增lexer_stream.c文件实现流式token缓冲功能 refactor(lexer_log): 重命名logger变量和头文件定义 - 将头文件保护宏从__SMCC_LEXER_LOG_H__改为__SCC_LEXER_LOG_H__ - 将logger变量从__smcc_lexer_log改为__scc_lexer_log - 更新头文件包含从<libcore.h>到<scc_core.h> refactor(lexer_token): 重新组织token头文件结构 - 将头文件保护宏从__SMCC_CC_TOKEN_H__改为__SCC_LEXER_TOKEN_H__ - 更新头文件包含从<libcore.h>到<scc_core.h> - 将scc_lexer_token结构体定义移至该文件 refactor(lexer): 简化token匹配代码格式 - 移除LCC相关的注释内容 - 优化括号符号的token匹配代码格式,使用clang-format控制 refactor(pprocessor): 更新依赖项名称和头文件包含 - 将libcore重命名为scc_core - 将libutils重命名为scc_utils - 更新头文件包含路径 refactor(runtime): 重命名libcore为scc_core并重构目录结构 - 将libcore目录重命名为scc_core - 将libutils目录重命名为scc_utils - 更新所有相关的头文件包含路径 - 修改cbuild.toml中的包名称 - 更新core_vec.h中的宏定义以支持标准库模式
63 lines
1.4 KiB
C
63 lines
1.4 KiB
C
/**
|
|
* @file pprocessor.h
|
|
* @brief C语言预处理器核心数据结构与接口
|
|
*/
|
|
|
|
#ifndef __SCC_PP_H__
|
|
#define __SCC_PP_H__
|
|
|
|
#include <pp_macro.h>
|
|
#include <scc_core.h>
|
|
#include <scc_utils.h>
|
|
|
|
// 条件编译状态
|
|
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 scc_pproc {
|
|
scc_probe_stream_t *stream; // 输出流
|
|
scc_strpool_t strpool; // 字符串池
|
|
scc_pp_macro_table_t macro_table;
|
|
SCC_VEC(if_stack_item_t) if_stack; // 条件编译栈
|
|
} scc_pproc_t;
|
|
|
|
/**
|
|
* @brief 初始化预处理器
|
|
* @param[out] pp 要初始化的预处理器实例
|
|
* @param[in] input 输入流对象指针
|
|
* @return output 输出流对象指针
|
|
*/
|
|
// TODO 内存释放问题
|
|
scc_probe_stream_t *scc_pproc_init(scc_pproc_t *pp, scc_probe_stream_t *input);
|
|
|
|
/**
|
|
* @brief 销毁预处理器
|
|
* @param[in] pp 预处理器实例
|
|
*/
|
|
void scc_pproc_drop(scc_pproc_t *pp);
|
|
|
|
/// inner private struct
|
|
|
|
typedef SCC_VEC(u8) scc_pp_buffer_t;
|
|
typedef struct pp_stream {
|
|
scc_probe_stream_t stream;
|
|
scc_probe_stream_t *input;
|
|
scc_pproc_t *self;
|
|
|
|
scc_pos_t pos;
|
|
scc_probe_stream_t *tmp_stream;
|
|
} scc_pp_stream_t;
|
|
|
|
#endif /* __SCC_PP_H__ */
|