zzy
e850b5c981
feat(ir): 启用LIR模块并重构HIR组件结构
...
- 在cbuild.toml中启用lir依赖项,取消注释相关配置
- 重构libs/README.md文档,添加详细的库说明和层级结构
- 重命名头文件以统一命名规范:ast_def.h → scc_ast_def.h,
ast_dump.h → scc_ast_dump.h, hir相关文件添加scc前缀
- 更新include路径以匹配新的文件命名
- 在cfg模块中添加symbol ID类型和linkage枚举,完善符号表功能
- 实现cfg模块中的符号添加、查找和获取功能
- 修改HIR中meta字段替换原有的attribute字段,更新相关访问宏
- 修复HIR构建器中的函数元数据访问错误
- 为LIR模块创建完整的头文件结构,包括指令定义、转换器等组件
2026-04-21 20:35:37 +08:00
zzy
0fbfb36262
feat(cbuild): 更新项目配置以支持HIR中间表示
...
- 统一包名格式化,添加空格对齐
- 将依赖项从ir和lir重命名为hir,移除lir注释
- 为ast2ir模块添加正确的包名称"scc_ast2ir"
- 更新依赖引用路径指向新的HIR库结构
- 移除注释掉的ir2mcode和sccf2target依赖项
refactor(ast2ir): 迁移到HIR中间表示替换IR表示
- 更新头文件包含,使用hir_builder.h替代ir_builder.h
- 修改上下文结构体,将scc_ir_builder_t替换为scc_hir_builder_t
- 更新函数签名,将参数类型从scc_ir_*转换为scc_hir_*
- 调整返回值类型,将scc_ir_value_ref_t和scc_ir_type_ref_t
分别替换为scc_hir_value_ref_t和scc_hir_type_ref_t
- 重新排列头文件包含顺序以满足依赖关系
2026-04-21 14:05:21 +08:00
zzy
e5bbffe170
feat(cbuild): 添加 lir 库依赖并注释掉未使用的模块
...
- 添加 { name = "lir", path = "./libs/lir" } 依赖项
- 注释掉 ir2mcode 和 sccf2target 模块以暂时禁用
refactor(ast2ir): 修复类型转换问题并简化哈希表初始化
- 修复 compute_type_layout 函数中的类型转换警告
- 在表达式处理末尾添加 UNREACHABLE() 断言
- 移除 begin_func 中的 param_names 参数
- 使用 scc_hashtable_usize_init 替代自定义比较函数
refactor(ir): 简化函数构建器接口并修复返回值处理
- 移除 scc_ir_builder_begin_func 中的 param_names 参数
- 修改 scc_ir_builder_ret_void 以正确处理 void 返回值
- 初始化返回值节点而不是直接设置为 0
refactor(ir): 简化模块初始化中的哈希表配置
- 移除自定义 hash_key 和 cmp_key 函数
- 使用 scc_hashtable_usize_init 统一初始化哈希表
feat(lir): 添加低层中间表示库基础结构
- 创建 lir 库的包配置文件
- 定义 LIR 的基本数据结构、指令类型和操作枚举
- 实现 LIR 构建器和模块管理功能
- 添加 LIR 转换器头文件和转储功能
2026-04-18 11:35:43 +08:00
zzy
5a9f816ccf
fix(abi): 修复void类型的ABI计算缺少break语句
...
在scc_type_abi.c文件中,void类型的case分支缺少break语句,
导致执行流程错误地进入下一个case分支。
feat(ast): 为参数声明添加索引字段
在ast_def.h头文件中为参数声明结构体添加param_idx字段,
用于跟踪参数在函数参数列表中的位置索引。
feat(ast): 更新参数初始化函数以支持索引参数
修改scc_ast.h中的scc_ast_decl_param_init函数签名,
添加参数索引idx参数,并将该值存储到参数声明结构体中。
feat(ast2ir): 添加IR转换上下文的值使用提示选项
在ast2ir.h中为scc_ast2ir_ctx_t结构体添加hint_using_value字段,
控制参数转换时是使用值还是分配内存的方式。
fix(ast2ir): 正确处理void类型到IR的转换
当遇到大小为0的类型(如void)时,直接返回void类型,
而不是尝试匹配其他大小分支。
refactor(ast2ir): 统一基本块引用类型为value_ref
将逻辑表达式、条件语句、循环语句中的基本块引用类型
从bblock_ref_t改为value_ref_t,保持类型一致性。
fix(ast2ir): 修正函数引用空值检查
使用SCC_IR_REF_nullptr常量替代0进行函数引用的空值检查,
提高代码的可读性和正确性。
refactor(ast2ir): 简化参数处理逻辑
移除不必要的函数参数获取和命名设置逻辑,
通过递归调用scc_ast2ir_decl来处理参数声明。
feat(ast2ir): 实现参数声明到IR的转换
为参数声明添加完整的IR转换逻辑,包括类型转换、
参数引用创建和内存分配处理。
refactor(ast2ir): 更新哈希表初始化接口
适配新的哈希表初始化函数签名,添加userdata参数支持,
并初始化hint_using_value字段为false。
refactor(ir): 移除函数参数的预分配逻辑
删除IR构建器中函数参数的预分配和循环添加逻辑,
简化函数开始构建的处理流程。
refactor(ir): 更新类型哈希表键值处理
修改类型哈希表的哈希和比较函数以接受模块参数,
正确处理空引用情况并支持新的键值传递方式。
fix(ir): 修复IR转储中的字符串格式
移除IR函数转储时多余的换行符,确保输出格式正确。
refactor(ir): 更新模块哈希表初始化
适配哈希表初始化接口变更,添加userdata参数,
并为各种向量预留UID 0作为无效引用。
fix(ir): 修复模块清理中的循环起始索引
将模块清理循环的起始索引从0改为1,跳过预留的
无效引用项,避免访问空指针。
refactor(ir): 调整向量和哈希表操作顺序
调整模块中向量push和哈希表set的操作顺序,
确保数据一致性和正确的UID分配。
chore(build): 移除ir2mcode模块相关文件
移除ir2mcode相关的头文件和源文件,这些组件
将在后续重构中重新设计或替换。
2026-04-15 14:52:11 +08:00
zzy
8054f20375
test(simple): 重构测试文件结构并添加新的测试用例
...
将原有的测试文件移动到专门的返回值测试目录(return_val_cases)中,
同时添加了标准输出测试目录(stdout_val_cases),新增了参数传递测试用例
和标准输出测试用例,使测试结构更加清晰和模块化。
2026-04-13 11:40:23 +08:00
zzy
ffb23afaf4
feat(ast2ir): 添加数组初始化支持和AST转IR优化
...
添加了对未知长度数组的自动长度推导功能,支持字符串字面量和复合
初始化的数组长度计算。新增辅助函数resolve_array_length用于计算
数组实际长度,以及emit_array_initialization用于生成数组初始化
代码。
同时将AST转IR过程中的参数改为const引用,提高代码安全性。
新增IR构建器的借用检查机制,防止在借用期间进行重分配操作。
fix(ast): 为AST结构体添加详细注释说明字段用途
2026-04-13 11:36:52 +08:00
zzy
694778e4a0
feat(abi): 新增ABI类型布局描述接口和Windows x64实现
...
- 新增scc_abi包,包含基础类型布局描述接口
- 实现Windows x64 ABI类型布局计算功能
- 定义基本类型枚举和布局信息结构体
- 提供类型布局计算的核心接口函数
refactor(ast2ir): 使用新的ABI接口替换旧的类型转换实现
- 将旧的scc_type_abi_t替换为新的scc_abi_type_calc_t
- 更新AST到IR的类型转换逻辑,使用新的ABI计算接口
- 修改上下文初始化和类型解析相关代码
- 移除废弃的头文件和相关实现
refactor(ir): 统一IR节点引用类型命名并完善构建器功能
- 将scc_ir_node_ref_vec_t重命名为scc_ir_value_ref_vec_t保持一致性
- 更新聚合类型的字段名称从elements到fields
- 添加全局变量分配构建器函数scc_ir_builder_global_alloca
- 清理构建器中多余的注释和代码
2026-04-12 11:30:31 +08:00
zzy
630e22b73b
feat(argparse): 添加命令行参数约束和错误处理功能
...
- 添加了命令行参数约束相关数据结构定义
- 新增错误上下文字段用于更好的错误提示
- 实现了参数验证功能,包括必需参数检查和值选择验证
- 改进错误处理流程,支持添加帮助信息和使用说明
- 优化调试输出格式,增加更多错误场景的处理
fix(parser): 修复语义分析器资源释放问题
- 在scc_sema_drop函数中添加空指针检查,避免空指针释放导致崩溃
refactor(dump): 重构AST节点转储实现
- 将树形转储上下文重构为更简洁的数据结构
- 修改转储回调函数签名以支持更好的缓冲区管理
- 优化内存拷贝操作,提高转储性能
style(amd64): 移除未使用的变量声明
- 删除scc_mcode_amd64_mov_r64_m64_sib函数中未使用的disp8变量
2026-04-11 11:42:31 +08:00
zzy
053c6abf51
feat(ir): 重构指针操作API并优化数组访问逻辑
...
- 将scc_ir_builder_get_ptr重命名为scc_ir_builder_get_elem_ptr以更好地反映其功能
- 移除旧的GET_PTR相关枚举和结构体定义
- 更新IR构建器中指针类型的处理逻辑,支持数组元素指针计算
- 在代码生成阶段正确处理元素指针操作的索引计算
fix(ast2ir): 修正数组下标表达式的指针获取操作
- 将数组访问中的get_ptr调用替换为get_elem_ptr
- 确保数组元素访问使用正确的IR指令
perf(runtime): 优化fprintf函数的大字符串处理性能
- 实现动态缓冲区分配策略,小字符串使用栈缓冲区,大字符串使用堆分配
- 避免固定大小缓冲区可能导致的截断问题
- 添加适当的内存清理机制
2026-04-11 10:12:22 +08:00
zzy
eeb4c4fc3c
feat(ast): 重构AST节点类型定义并实现数组下标访问
...
- 将scc_ast_node_type_t重命名为scc_ast_node_kind_t以提高语义清晰度
- 为scc_ast_node结构体添加名称定义
- 更新所有相关头文件中的类型引用
- 实现数组下标表达式的IR转换逻辑
- 添加对sizeof和alignof表达式的基本支持
fix(ast2ir): 修复表达式求值和类型处理问题
- 修复数组类型退化为指针的逻辑
- 修复变量声明初始化值检查条件
- 添加结构体和枚举类型的IR生成支持
- 移除未使用的代码段
refactor(ir): 完善IR上下文错误处理
- 为未处理的类型标签添加恐慌处理
- 修复联合类型的哈希计算
chore(build): 更新依赖项配置
- 修正lexer模块中的依赖项名称
style(parser): 清理解析器代码
- 移除未使用的类型哈希表
- 更新语义分析回调函数签名
- 添加属性语法的占位符实现
- 完善内存清理逻辑
test: 添加数组下标和枚举测试用例
- 新增15_array_subscript.c测试数组下标访问
- 新增16_enum.c测试枚举类型功能
- 更新期望结果配置文件
2026-04-09 11:18:32 +08:00
zzy
d88475cc06
feat(ir2mcode): 添加帧分配器框架和Windows 64位实现
...
添加了frame_alloc.h头文件定义帧分配器操作接口,实现了Windows 64位
平台的帧分配器实现,包括槽位分配、偏移计算和栈帧布局管理功能。
BREAKING CHANGE: 移除了旧的frame_manager.h接口,采用新的frame_alloc_ops_t
抽象接口。
fix(ast2ir): 修复字符串字面量表达式返回值问题
修复了AST到IR转换过程中字符串字面量表达式的处理,确保正确返回
创建的常量字符串值引用而非直接跳出。
fix(ir): 修复内置memcpy函数参数验证和类型比较逻辑
在IR构建器中为builtin_memcpy函数添加参数空指针检查,在类型比较
函数中添加未知类型的边界条件处理,增强系统稳定性。
refactor(ir2mcode): 重构寄存器分配器接口以支持帧分配器集成
修改寄存器分配器接口以接受帧分配器参数,统一节点到位置的映射表
命名,并提供便捷的栈大小和偏移获取接口。
2026-04-08 14:37:56 +08:00
zzy
4144f7841c
refactor(argparse): 将null替换为nullptr以提高C++兼容性
...
- 在argparse库中将所有null指针常量替换为nullptr
- 更新头文件和源文件中的指针初始化和比较操作
- 修改测试文件中的相关断言检查
- 更新AST定义文件中的注释说明
2026-04-05 20:18:09 +08:00
zzy
27d86d5685
feat(ast2ir): 添加指针运算支持并修复整数字面量解析
...
- 实现了指针解引用(*)和取地址(&)操作符的IR转换
- 添加parse_lexme2const_int函数统一处理整数字面量解析
- 支持数组大小表达式的常量解析
- 修复函数缺少返回语句的问题,在函数末尾添加默认ret指令
refactor(ir_builder): 调整函数参数类型处理逻辑
- 修改函数参数以指针形式传递,更新参数类型处理方式
- 优化参数节点创建过程,将参数类型包装为指针类型
fix(ir_dump): 修正IR输出格式问题
- 调整基本块和函数的输出格式,确保正确的换行和缩进
- 统一输出格式,提升可读性
feat(ir2mcode): 添加帧管理器头文件定义
- 定义frame_manager.h接口,包含栈帧分配相关函数声明
- 提供栈槽分配、寄存器保存、偏移计算等功能接口
refactor(reg_alloc): 添加初始栈大小配置
- 在寄存器分配器中增加init_stack_size字段
- 支持初始化栈大小设置,为后续帧管理功能做准备
test: 添加指针操作测试用例
- 新增14_pointer.c测试文件,验证指针取地址和解引用功能
- 在expect.toml中添加对应的期望返回值
2026-04-04 13:22:19 +08:00
zzy
ca187c78f1
feat(ast): 更新AST dump功能以使用新的树转储接口
...
- 将头文件中的tree_dump.h替换为scc_tree_dump.h
- 修改函数签名将scc_tree_dump_ctx_t改为scc_tree_dump_t
- 移除过时的宏定义和内联函数实现
- 使用新的scc_tree_dump_* API替代旧的PRINT_*宏
- 简化类型、表达式、语句和声明的转储逻辑
- 统一使用新的树转储接口进行节点和值的输出
feat(ast2ir): 实现逻辑运算符和一元运算符的IR转换
- 添加scc_ast2ir_logical_expr函数处理&&和||运算符
- 实现短路求值逻辑,包含分支控制流
- 添加对一元正号运算符的支持
- 实现取地址和间接寻址运算符
- 添加字符字面量解析支持转义序列
fix(ir): 修复字符串常量构建中的长度计算错误
- 修正数组长度计算从len+1改为len-1
- 调整字符串内容复制逻辑跳过引号边界
- 修正内存分配大小与实际数据长度匹配
refactor(ir): 更新IR转储模块使用统一的树转储接口
- 将IR转储上下文中的tree_dump_ctx_t替换为scc_tree_dump_t
- 更新初始化函数签名以使用新的转储接口类型
2026-04-03 20:10:51 +08:00
zzy
78e7c800ba
refactor(ir): 将IR节点重构为值引用并添加字符串字面量支持
...
- 将scc_ir_node_ref_t重命名为scc_ir_value_ref_t,并更新所有相关API
- 修改IR定义中的节点标签枚举为值标签枚举(scc_ir_node_tag_t -> scc_ir_value_tag_t)
- 更新AST到IR转换器中所有节点引用的类型声明
- 添加对内置类型(VOID, CHAR, INT等)的完整映射实现
- 实现字符串字面量的常量数组创建功能
- 更新项目名称从"Simple Modual C Compiler"为"Simple C Compiler"
- 在Doxyfile中排除external目录的文档生成
- 移除未使用的strpool字段并重命名decl到IR的映射表
BREAKING CHANGE: IR节点引用类型已更改,所有使用scc_ir_node_ref_t的地方需
替换为scc_ir_value_ref_t。
2026-03-31 11:42:14 +08:00
zzy
4ddad7b456
docs(scc_core): 添加standalone printf库的完整文档
...
添加了printf/sprintf格式化打印函数库的详细README文档,包含:
- 库的功能介绍和设计目标
- 使用方法和CMake配置选项
- 支持的格式说明符和API文档
- 贡献指南和许可证信息
fix(test): 改进测试脚本的并发安全性和资源清理
修改了测试脚本以支持并发执行,避免多进程测试时的文件冲突:
- 使用UUID生成唯一的可执行文件名
- 改进了编译和执行过程中的错误处理
- 添加了确保临时文件被正确清理的机制
- 移除了原有的固定文件名和清理逻辑
2026-03-25 11:59:56 +08:00
zzy
8c7af571c2
refactor(ast2ir): 更新IR构建器接口并重构类型映射
...
- 将IR构建器初始化函数修改为接受cprog参数
- 添加scc_ast2ir_ctx_drop函数用于资源清理
- 更新类型标识符命名规范,从大写改为小写形式
- 替换scc_ir_ctx_get_*函数调用为scc_ir_module_get_*函数
- 移除对ir_builtin.h的依赖,改用ir_builder.h中的构建器函数
- 为整数常量创建添加专门的构建器辅助函数
fix(ir): 重构IR上下文和模块管理结构
- 将原有的scc_ir_cprog_ctx_t拆分为scc_ir_module_t和scc_ir_ctx_t
- 添加scc_ir_module_t结构用于统一管理IR对象存储
- 更新IR类型枚举名称格式,从SCC_IR_TYPE_XXX改为SCC_IR_TYPE_xxx
- 添加整数、无符号整数和浮点数常量联合体定义
- 移除ir_base.h和ir_builtin.h头文件,整合到scc_ir.h中
feat(ir_builder): 添加类型构建器函数和常量创建功能
- 为各种基础类型添加scc_ir_builder_type_*内联函数
- 实现scc_ir_builder_const_int函数用于创建整数常量
- 修改构建器初始化函数签名以接受cprog参数
- 更新构建器内部结构,使用指向cprog的指针而非嵌入式结构
2026-03-25 11:59:27 +08:00
zzy
d167a8ba96
fix(sccf): 修复符号构建器中的字符串处理逻辑
...
在sccf_builder_add_symbol函数中修正了字符串键的使用方式,
直接使用传入的name参数而不是从字符串表中获取,
避免了潜在的内存访问问题并简化了代码逻辑。
2026-03-23 18:11:32 +08:00
zzy
741171dbba
feat(ir): 实现函数调用和参数处理功能
...
- 在AST定义中移除函数调用结构体中的冗余name字段
- 实现完整的函数声明和定义处理流程,支持符号表查找
- 添加函数参数引用节点类型,支持参数传递和访问
- 实现函数调用的IR生成,包括参数处理和符号解析
- 添加断言确保节点有效性,提升代码健壮性
fix(ast2ir): 优化类型转换处理逻辑
- 移除多余的注释说明
- 简化参数为空检查逻辑,提高代码简洁性
- 修复函数调用时的符号表查找机制
refactor(ir): 改进IR构建器接口设计
- 修改函数构建相关API,使接口更加清晰
- 添加函数声明集合管理
- 重构内置类型缓存机制
feat(ir2mcode): 完善AMD64代码生成
- 实现函数参数到寄存器的映射
- 添加函数调用约定支持(最多4个参数)
- 实现函数符号和重定位处理
- 添加栈帧管理机制
- 修正栈偏移计算
chore(ir): 清理和优化IR dump输出
- 更新节点类型描述信息
- 改进函数声明和定义的输出格式
- 修正格式化输出中的符号显示问题
style: 代码格式化和命名规范化
- 统一重定位类型枚举命名
- 优化函数参数验证和错误处理
2026-03-23 16:02:23 +08:00
zzy
097dbdcc2a
feat(ir2mcode): 实现AMD64代码生成器支持控制流和函数调用
...
- 实现了条件分支、无条件跳转和函数调用的机器码生成
- 添加了跳转目标地址回填机制,处理条件分支和跳转指令的偏移量
- 改进了寄存器分配逻辑,支持函数调用返回值的处理
- 重构了位置解析函数,从返回指针改为传入引用参数
fix(ast2ir): 移除无用的注释代码
- 删除了关于一元操作符映射的注释代码
test: 更新测试框架和测试用例
- 修改测试框架以支持新的可执行文件输出格式
- 添加了条件分支、循环和函数调用的测试用例
- 使用TOML配置文件管理期望的返回值
- 替换标准库头文件为自定义头文件以减少依赖
2026-03-21 14:38:30 +08:00
zzy
35a704a1cb
refactor(ast): 统一记录类型结构并移除成员访问操作符
...
- 移除了枚举类型的独立结构定义,统一使用record结构
- 移除了成员访问操作符SCC_AST_OP_MEMBER_ACCESS和SCC_AST_OP_PTR_MEMBER_ACCESS
- 更新了for循环语句中init字段的类型从scc_ast_type_t*到scc_ast_node_t*
- 修改了声明初始化函数以支持统一的记录类型处理
fix(ast2ir): 完善二元表达式处理和for循环代码生成
- 重构了赋值操作符的处理逻辑,通过临时表达式实现复合赋值
- 添加了对for循环语句的完整IR代码生成功能
- 修复了if-else语句中错误的基本块跳转问题
- 改进了标识符未找到时的错误提示信息
chore: 清理代码和修复潜在问题
- 移除了未使用的自动标签生成功能
- 统一了IR基本块标签格式化输出
- 修复了机器码生成中的寄存器存储控制流问题
- 改进了词法分析器中十六进制数字的处理逻辑
2026-03-21 10:33:17 +08:00
zzy
a64e1f8330
feat(ir2amd64): 支持函数返回值处理
...
- 在RET节点中添加对返回值的处理逻辑
- 解析返回值位置并加载到RAX寄存器
refactor(pe_builder): 禁用PE构建器中的日志输出
- 定义空的LOG_INFO宏以禁用调试信息
- 避免在PE构建过程中产生不必要的日志输出
2026-03-20 14:22:33 +08:00
zzy
de6f5d510a
feat(ir2mcode): 添加IR到机器码转换模块并更新依赖配置
...
- 新增ir2mcode库用于将IR转换为机器码
- 添加sccf2target依赖以支持目标平台转换
- 在ast库中添加scc_pos依赖支持位置信息
- 更新cbuild.toml配置文件添加新库依赖
- 实现AMD64架构代码生成功能
- 添加寄存器分配器实现栈和寄存器位置管理
- 支持基本的算术运算和内存访问操作
- 添加PE格式目标文件生成支持
2026-03-20 14:12:25 +08:00
zzy
02a6c684f1
feat(ast2ir): 添加左值标识支持以改善表达式处理
...
- 在 scc_ast2ir_expr 函数中添加 is_lvalue 参数来区分左值和右值表达式
- 更新二元表达式处理逻辑,特别是赋值操作符的处理
- 改进标识符表达式的处理,根据是否为左值决定返回存储位置还是加载值
- 修复哈希比较函数的实现
- 移除调试相关的注释代码
refactor(parser): 优化语法分析器错误处理和控制流
- 移除不必要的错误恢复辅助注释
- 修改表达式解析的控制流程,将直接返回改为使用 break 语句
- 添加语义分析回调,在解析完成后进行标识符查找和验证
refactor(sema): 增强语义分析阶段的符号表管理
- 改进标识符查找逻辑,增加对非变量标识符的检查
- 扩展声明处理范围,包括变量和参数声明的符号表注册
- 为函数声明添加作用域管理
fix(parser): 修正单元测试中的类型定义
- 将 long long 类型定义改为 int 类型,解决测试兼容性问题
refactor(sccf): 重构文件格式定义和构建器实现
- 重命名符号类型枚举值 OBJECT 为 EXTERN
- 重命名段类型枚举值 RELOC 为 RELOCS
- 修正结构体字段命名的一致性问题
- 重新设计 SCCF 构建器的数据结构和API
- 添加符号表、字符串表和重定位表的构建支持
refactor(target): 重命名Windows PE相关类型定义
- 将 scc_winpe_* 类型重命名为 scc_pe_* 以保持命名一致性
chore: 添加 sccf2target 模块用于格式转换
- 创建新的库模块用于 SCCF 到目标格式的转换
- 实现 PE 格式转换的基本功能
- 添加示例程序演示格式转换过程
2026-03-19 12:11:57 +08:00
zzy
5f915ba8d3
refactor(ast): 移除内置类型头文件并优化类型初始化
...
移除了独立的ast_builtin.h头文件,将内置类型定义整合到现有结构中,
同时修复了类型初始化函数命名不一致的问题。
BREAKING CHANGE: 原有的ast_builtin.h头文件已被移除,
相关内置类型声明已重构为新的接口形式。
fix(parser): 修复表达式解析中的位置信息处理
确保条件表达式和逗号表达式的解析正确获取并传递位置信息,
避免在语法树构建过程中丢失源码位置。
refactor(ir): 修复IR转储中的类型转换问题
添加必要的类型转换以防止整数溢出,并优化代码格式以提高可读性。
feat(parser): 添加表达式解析测试套件
引入全面的表达式解析测试框架,覆盖从基本表达式到复杂嵌套表达式
的各种场景,确保解析器功能的正确性和稳定性。
2026-03-18 12:18:56 +08:00
zzy
2e5e98868d
feat(ast): 添加汇编器模块并改进AST定义和IR转换
...
- 在README.md中添加asm汇编器模块说明
- 更新ast_def.h中的枚举注释,添加sema相关信息以明确语义分析作用域
- 重命名函数参数param_types为params,使命名更清晰
- 移除call表达式中的_target字段,简化结构
- 为member、identifier等字段添加///< fill by sema注释说明填充时机
- 为jump语句添加_target字段用于语义分析
- 更新所有AST初始化函数,接受位置信息参数以改进错误定位
- 修复alignof表达式的类型应为ALIGN_OF而非SIZE_OF的问题
- 重构ast2ir.h,引入scc_ast2ir_ctx_t上下文结构体统一管理转换状态
- 添加符号表、节点到IR映射等必要的转换上下文信息
2026-03-17 20:29:40 +08:00
zzy
cabd1710ed
feat(parser): 使用静态数组初始化测试向量
...
- 将多个测试用例中的 `scc_vec_unsafe_from_array` 替换为
`scc_vec_unsafe_from_static_array` 以提高性能
- 此更改影响了 `test_parser_unit` 和 `test_parser_type` 函数中的多个位置
feat(sccf): 添加SCC格式支持和相关工具
- 创建新的 sccf 库用于处理 SCCF (SCC Format) 文件格式
- 实现了基本的文件格式定义,包括头部、段表、符号表等结构
- 添加了构建器和链接器的基本框架
- 包含格式化工具的初始实现
refactor(main): 修复输出文件检查逻辑
- 修正主函数中输出文件检查条件,确保在 fp 为 null 时正确处理
- 更新输出消息显示逻辑以匹配文件操作状态
2026-03-16 11:02:32 +08:00
zzy
45c59e0b65
feat(ast2ir): 添加AST到IR转换功能并完善类型ABI支持
...
- 添加了ast2ir库用于将AST转换为IR中间表示
- 实现了Windows x64 ABI类型定义文件
- 完善了IR库中的类型定义,添加了无符号整数类型和操作符枚举
- 更新了IR转储功能以支持新的节点类型
- 在主程序中集成了AST到IR的转换流程
- 修改了PE目标文件生成功能以修正节区标志
- 更新了向量实现的日志和错误处理机制
fix(ir): 修复IR库中的操作符枚举和类型处理问题
- 修复了IR操作符枚举的命名空间问题,统一使用SCC_IR前缀
- 添加了无符号整数类型的哈希和比较支持
- 修正了常量整数节点的打印函数调用
- 更新了各种IR节点的转储输出格式
- 删除了测试文件中的冗余代码
refactor: 重构项目依赖配置和构建设置
- 启用了ast2ir和ir库的依赖配置
- 添加了def文件到.gitignore中
- 重命名了部分测试文件
2026-03-15 15:44:50 +08:00
zzy
6ebf0c48e3
feat(pe): 添加PE文件构建器功能
...
新增PE库的基础设施包括:
- 创建README.md文档,说明代码参考rust cargo的object库实现
- 配置cbuild.toml包依赖,添加scc_utils依赖项
- 定义scc_pe_builder.h头文件,包含PE构建器的数据结构和API函数
- 实现PE文件的段管理、头信息处理和文件写入功能
2026-03-15 11:53:24 +08:00
zzy
82dd5f2db0
fix(ast): 修复AST转储中逗号分隔符逻辑错误
...
在dump_decl_impl函数中,修正了列表元素间逗号分隔符的判断逻辑,
将条件从"不是最后一个元素"改为"是最后一个元素",确保正确的
分隔符输出。
BREAKING CHANGE: 逗号分隔符的逻辑被反转,影响AST转储输出格式。
---
fix(parser): 修复声明列表处理中的内存泄漏问题
调整了typedef声明的处理顺序,在解析完成前添加声明到列表,
避免了重复添加导致的内存泄漏。同时移除了不必要的错误检查。
---
refactor(parser): 重构记录类型和枚举类型的声明初始化逻辑
移除了重复的声明创建代码,统一了结构体、联合体和枚举类型的
声明初始化流程,消除了之前存在的Panic错误路径。
---
test(parser): 增加复杂声明的单元测试覆盖
添加了对结构体指针声明和typedef复合声明的测试用例,
提高了测试覆盖率并验证了解析器的正确性。
---
feat(preprocessor): 添加预定义宏支持
增加了__SCC__、_WIN64和__x86_64__等预定义宏的定义,
为不同平台提供更好的编译支持。
2026-03-14 15:39:26 +08:00
zzy
eb969cdbf7
feat(parser): 添加声明列表支持并重构解析逻辑
...
- 添加 SCC_AST_DECL_LIST 节点类型用于表示声明列表
- 实现 scc_ast_decl_list_init 函数来初始化声明列表节点
- 重构 scc_parse_declaration 函数以支持逗号分隔的多个变量声明
- 分离类型说明符解析到独立的 scc_parse_declaration_specifiers 函数
- 支持 typedef 和多变量声明如 'int a, b;' 和 'int a = 1, b = 2;'
- 在 ast_dump 中添加对声明列表节点的打印支持
refactor(ast): 统一使用 scc_vec_foreach 宏替换手动循环
- 将 ast_dump.c 中的多个手动索引循环改为使用 scc_vec_foreach
- 提高代码可读性和安全性
- 避免索引越界错误
fix(parser): 修复语义分析中结构体符号表冲突
- 为结构体、联合体和枚举符号名添加前缀避免命名冲突
- 使用 '$S_'、'$U_'、'$E_' 前缀分别标识结构体、联合体和枚举
refactor(log): 统一终止处理方式
- 将 log_exit 替换为 log_abort 以更准确反映行为
- 更新相关依赖模块的实现
style(parser): 移除未使用的参数和清理代码
- 在 argparse.c 中添加 (void) 参数注释处理未使用的参数
- 清理 parse_expr.c 中未使用的函数声明
- 优化 parse_type.c 中的错误处理流程
2026-03-14 14:04:24 +08:00
zzy
8fcfeda14e
feat(ast): 添加内置表达式支持并完善解析器功能
...
- 添加SCC_AST_EXPR_BUILTIN枚举值用于表示内置表达式
- 定义scc_ast_builtin_expr_type_t枚举包含va_start、va_end、va_copy、va_arg等内置函数类型
- 在AST表达式结构中添加builtin字段以支持内置表达式存储
- 实现scc_ast_decl_unsafe_val_init内联函数用于不安全的声明初始化
- 修改sizeof和alignof表达式初始化函数以支持类型或表达式参数
- 修复默认语句的字段引用错误(default_stmt而非case_stmt)
- 改进词法分析器对整数字面量后缀(U、L、LL等)的处理逻辑
- 重构解析器中的声明解析逻辑,统一使用scc_parse_declarator函数
- 完善结构体、联合体和枚举类型的声明解析,支持仅有名称的前向声明
- 优化初始化列表解析,支持复合字面量的成员访问语法
- 更新参数类型列表解析以正确处理参数声明
- 修复括号表达式的解析逻辑,区分类型转换和普通括号表达式
2026-03-13 17:39:14 +08:00
zzy
c99f64708e
feat(parser): 改进解析器错误处理和表达式解析逻辑
...
- 在初始化解析中添加缺失的赋值操作符检查
- 改进后缀表达式解析逻辑,处理嵌套情况
- 添加数组下标初始化的赋值操作符验证
- 修复主表达式解析中的返回语句处理
refactor(pproc): 优化预处理器宏展开和位置追踪
- 添加token复制函数来保持原始位置信息
- 重构宏展开函数参数传递方式
- 修复字符串化参数的位置信息处理
- 改进可变参数宏的处理逻辑
test(parser): 增加标签语句和字符串字面量测试用例
- 添加返回语句with复合字面量的测试
- 增加标签继续语句的测试用例
- 添加字符串连接的解析测试
test(pproc): 添加预处理器位置追踪测试
- 增加双重宏定义位置追踪测试
- 添加带参数宏定义位置追踪测试
- 增加字符串化操作位置追踪测试
docs: 更新代码中的宏定义和注释
- 修正未定义标识符的拼写错误
- 添加必要的头文件包含
- 改进错误消息提示文本
2026-03-13 13:48:55 +08:00
zzy
2d1032c363
feat(ast): 添加LVALUE表达式类型支持并重构表达式创建逻辑
...
- 新增SCC_AST_EXPR_LVALUE表达式类型用于表示右值
- 重构表达式创建逻辑,移除旧的通用创建函数expr_create
- 使用新的初始化函数替代原有的表达式创建方式
- 更新AST转储功能以支持LVALUE表达式的输出
- 修改sizeof表达式解析逻辑,修复类型转换处理
- 优化各种表达式类型的解析和初始化过程
2026-03-12 21:58:00 +08:00
zzy
c46578736a
feat(ast): 添加复合表达式和初始化器解析支持
...
重构AST表达式枚举,将COMPOUND_LITERAL重命名为COMPOUND,
更新相关结构体定义以支持复合字面量的左右表达式向量表示。
添加lvalue表达式类型用于左值处理,实现完整的初始化器解析功能,
包括大括号初始化列表、成员访问和数组下标的处理逻辑。
更新表达式解析器为基于优先级的递归下降解析,修复变量声明中
初始化表达式的内存泄漏问题。
完善类型限定符和存储类说明符的重复检查机制,增强语法分析的准确性。
2026-03-12 21:14:08 +08:00
zzy
b00a42a539
feat(parser): 实现赋值表达式和常量表达式解析功能
...
- 添加 scc_parse_assignment_expression 函数用于解析赋值表达式
- 添加 scc_parser_constant_expression 函数用于解析常量表达式
- 修改 cast 表达式解析逻辑,修复类型转换解析问题
- 改进错误处理机制,使用 SCC_ERROR 替代 LOG_ERROR 并提供准确位置信息
- 移除未使用的变量声明,优化代码结构
refactor(ast): 调整类型定义中的 typedef 类型存储结构
- 将 scc_ast_type 中的 underlying 字段改为 decl 字段
- 更新相关初始化函数以适配新的字段名称
- 修复枚举类型初始化时缺失的 decl 字段设置
feat(ast): 添加类型转换、sizeof 和 alignof 表达式的初始化函数
- 实现 scc_ast_expr_cast_init 用于初始化类型转换表达式
- 实现 scc_ast_expr_sizeof_init 用于初始化 sizeof 表达式
- 实现 scc_ast_expr_alignof_init 用于初始化 alignof 表达式
- 完善表达式类型的支持
chore(parser): 增加语义分析回调接口和位置获取工具函数
- 添加 scc_parse_decl_sema、scc_parse_type_sema 等语义分析辅助函数
- 提供 scc_parser_got_current_pos 函数获取当前解析位置
- 增强错误报告的准确性
refactor(dump): 完善 AST 转储功能,支持 break 和 continue 语句
- 为 SCC_AST_STMT_BREAK 和 SCC_AST_STMT_CONTINUE 添加转储支持
- 优化转储函数的分支处理结构
2026-03-12 14:57:35 +08:00
zzy
30ac2de73b
feat(parser): 添加语义分析回调清理函数并完善资源管理
...
添加了 scc_sema_drop 函数用于清理语义分析回调结构,
并在主程序中正确初始化和释放语义分析回调,
确保资源得到适当管理。
同时修复了AST转储中的缩进问题,在函数调用括号前添加正确的缩进,
并修正了测试代码中的结构体字段初始化顺序。
2026-03-11 22:07:52 +08:00
zzy
e6511c508c
refactor(ast): 调整AST结构体和枚举类型的声明表示方式
...
将结构体、联合和枚举类型的字段表示从向量改为声明指针,
允许name和decl字段为null,更新相关初始化函数的断言检查,
使结构更加灵活并支持不完整类型定义。
BREAKING CHANGE: 修改了scc_ast_type结构体中record和enumeration
子类型的字段表示方法,从fields向量改为decl指针。
2026-03-11 21:53:19 +08:00
zzy
ce5414f2eb
feat(ast): 添加完整的内置类型支持并重构类型定义
...
- 添加 va_list、bool、signed/unsigned 各种整数类型等内置类型
- 重新排列内置类型枚举顺序,增加 UNKNOWN 类型
- 为复合字面量、指针类型、数组类型添加初始化函数
- 添加结构体、联合体、枚举、typedef 类型的初始化函数
- 更新类型转储功能以支持新的内置类型显示
refactor(parser): 优化类型解析和声明处理逻辑
- 修改类型解析函数返回类型为通用 AST 节点
- 重构声明解析逻辑,支持变量和函数声明的不同处理路径
- 更新语法分析规则中的空格标记处理
- 简化表达式解析中的错误处理流程
fix(ast): 修复参数声明和类型转储相关问题
- 修正参数声明初始化函数中对 name 参数可为空的处理
- 修复类型转储中修饰符显示和指针类型显示问题
- 更新 AST 转储中空值检查使用正确的 null 比较
2026-03-11 16:51:52 +08:00
zzy
742bede02f
feat(ast): 修改函数调用表达式的结构定义
...
在AST定义中将函数调用表达式的name字段替换为callee字段,
以支持更复杂的函数调用场景。同时更新了相关的初始化函数、
转储函数和解析逻辑,使函数调用表达式能够正确处理callee节点。
BREAKING CHANGE: 函数调用表达式的结构发生了改变,从使用name字符串
改为使用callee表达式节点。
2026-03-10 14:33:32 +08:00
zzy
2e331ee016
feat(ast): 添加内置类型定义和AST节点初始化函数
...
添加了完整的内置类型支持,包括整数、浮点数、字符、布尔等基本类型,
以及它们的有符号/无符号变体。同时添加了大量的AST节点初始化函数,
简化了AST节点的创建过程。
BREAKING CHANGE: 重构了AST表达式和声明结构,移除了冗余字段,
统一了命名规范,并修改了函数调用和成员访问的表示方式。
2026-03-10 13:56:32 +08:00
zzy
80714fe7e5
feat(parser): 完善类型解析和表达式解析功能
...
完善了scc_parse_type函数以正确解析基本类型,修复了条件表达式解析逻辑,
实现了for循环中声明和表达式的混合处理,并添加了对赋值语句和复杂表达式的支持。
fix(parser): 修复内存泄漏和解析器状态管理问题
修复了当tok参数为null时的内存泄漏问题,在标签语句解析中正确处理解析器状态回退,
并改进了表达式和声明的错误处理机制。
test(parser): 更新单元测试以验证修复的功能
更新了返回语句的测试值,添加了包含变量声明、赋值语句和复杂表达式的综合测试用例,
验证了赋值运算符的右结合性和复杂表达式的解析正确性。
2026-03-09 22:45:18 +08:00
zzy
1fceeca011
feat(parser): 启用parser和ast模块并重构解析器结构
...
- 在cbuild.toml中启用parser和ast依赖项
- 将AST内置类型枚举重命名为SCC_AST_BUILTIN_TYPE_*前缀格式
- 修复ast_def.h中的类型字段命名,将builtin改为type
- 添加逗号操作符支持到表达式操作符枚举中
- 更新字面量表达式的lexeme字段为const char*指针和owned标志
- 重构解析器头文件结构,分离为parser.h、parser_utils.h、scc_sema.h等
- 实现新的解析器工具函数,包括预览、消费、回溯等功能
- 更新声明解析逻辑,使用新的解析器接口进行token处理
- 添加符号表语义分析功能框架
- 修复词法分析器中token移动时的空指针检查
- 统一使用scc_tree_dump_printf替代直接的scc_printf调用
2026-03-09 15:25:12 +08:00
zzy
a805814d3f
feat(pproc): 改进宏处理器中的标识符识别逻辑
...
修复了宏处理器中对标识符类型的检查方式,使用更准确的子类型判断函数,
确保关键字也能被正确处理为宏名或参数名。同时添加了相关的单元测试用例。
BREAKING CHANGE: 修改了token类型的检查方法
2026-03-04 17:35:54 +08:00
zzy
4015acd866
refactor(hashtable): 简化哈希表初始化接口并优化文件打开模式
...
- 将哈希表初始化从两步设置改为一步完成,直接传递哈希函数和比较函数
- 重构scc_hashtable_init函数签名,接受函数指针参数
- 更新内部字段名从key_cmp为cmp_func以保持一致性
- 添加类型定义scc_hashtable_hash_func_t和scc_hashtable_equal_func_t
- 修改PAL层文件操作接口,使用枚举模式替代固定只读模式
- 更新IR上下文、预处理器宏表等组件使用新的初始化方式
- 移除AST头文件中未使用的语义分析回调类型定义
- 修复预处理器中的空指针访问问题
2026-03-04 16:47:28 +08:00
zzy
2c4b803058
refactor(sstream): 使用scc_snprintf替换snprintf_
...
日志格式化函数从snprintf_更改为scc_snprintf以保持一致性,
并调整代码格式以适应新的函数调用方式。
refactor(runtime): 实现平台抽象层(PAL)
引入scc_core_pal.h作为平台抽象层,将内存管理、IO操作和
文件系统功能抽象化。原有的scc_malloc等函数现在通过宏定义
映射到对应的scc_pal_*函数。
feat(runtime): 添加字符串断言检查
在scc_cstring_append_cstr函数中添加Assert(str->data != null)
断言,确保字符串数据指针不为空。
refactor(runtime): 重新组织核心实现文件结构
将原有的cfg.std_impl.c拆分为core_impl.c中的具体实现和
scc_core_pal.h中的抽象接口定义,提供标准库的具体实现。
2026-03-02 21:21:17 +08:00
zzy
beb0b19026
fix(lexer): 在token拷贝函数中添加空指针检查
...
添加了对源指针的空值断言检查,防止在scc_lexer_tok_copy函数中
传入空指针导致崩溃
refactor(pproc): 优化数组到环形缓冲区转换函数的参数命名
修改scc_lexer_array_to_ring函数参数名从array改为move_array,
并在转换后初始化原数组结构,确保资源正确管理
fix(pproc): 修复宏处理中的内存泄漏问题
- 在fill_replacements函数中初始化token结构并正确释放
- 在scc_pproc_parse_function_macro中释放args向量
- 修改token消费逻辑以避免重复消费
- 在指令处理中添加token释放操作
fix(pproc): 改进宏展开过程中的资源管理
- 修复concatenate_tokens函数中的潜在内存泄漏
- 添加对输出向量的断言检查
- 正确释放输入环形缓冲区
- 重构参数拆分逻辑以避免内存泄漏
refactor(pproc): 优化条件解析和宏表设置逻辑
- 修正parse_constant_condition函数中的返回值初始化
- 在宏表设置时处理重复宏名称的情况
- 改进预处理器的整体资源清理流程
fix(pproc): 修复预处理器中的多个内存泄漏
- 在测试代码中添加正确的资源释放
- 修正格式化字符串中的类型匹配
- 优化环形缓冲区初始化逻辑以处理零容量情况
2026-03-02 18:04:43 +08:00
zzy
46f5328183
fix(pproc): 修复宏参数解析中的空白字符处理问题
...
- 在宏参数解析过程中使用 scc_lexer_next_non_blank 替代直接的 ring 操作,
确保正确跳过空白字符
- 更新 scc_pproc_expand_by_src 和 rescan 函数中使用
scc_lexer_peek_non_blank 替代原来的 scc_ring_peek,
以正确处理预处理器展开时的空白字符
- 修正测试用例中的预期输出,移除多余的空格
2026-03-01 16:02:04 +08:00
zzy
60cdfd2c33
feat(pproc): 修改宏展开器以支持连续函数式宏调用
...
修改了预处理器宏展开功能,将输出类型从环形缓冲区改为向量,
并实现了对连续函数式宏调用的支持。现在可以正确处理像
g(z) -> f(x * (z)) 这样的宏替换场景,其中标识符可能被重新
定义为新的函数式宏。
BREAKING CHANGE: 函数签名 scc_pproc_expand_by_vec 的输出参数
从 scc_lexer_tok_ring_t* 改为 scc_lexer_tok_vec_t*
2026-03-01 14:23:17 +08:00
zzy
8cbb9e6987
feat(pproc): 添加宏定义禁用机制和defined操作符解析功能
...
添加SCC_TOK_DISABLED标记类型用于表示被禁用的token
实现disable/enable/need_skip函数来管理宏展开过程中的递归控制
重构defined操作符解析逻辑到独立的parse_defined函数中
移除原有的need_rescan标志和相关重扫描逻辑
fix(sstream): 修复位置日志中行列号格式化问题
将snprintf格式字符串中的%u替换为%llu以支持更大的行列数值
test(pproc): 补充宏定义相关的单元测试用例
添加嵌套宏、自引用宏和无参数宏的测试用例
2026-03-01 12:16:23 +08:00
zzy
0fede5f46e
feat(pproc): 实现预处理器宏连接操作符功能
...
- 修改concatenate_tokens函数以支持null参数检查,避免空指针访问
- 添加concact辅助函数来处理##连接操作的逻辑
- 重构expand_function_macro中##操作符的实现,支持GNU扩展特性
- 实现对可变参数宏中##操作的正确处理,包括逗号删除逻辑
- 改进object宏中的##连接操作处理
- 添加多个单元测试用例验证连接操作符的正确性
- 修复字符串连接时的边界条件处理
refactor(tests): 重命名预处理器单元测试文件
- 将test_unit.c重命名为test_pproc_unit.c以更明确标识测试范围
2026-02-27 21:00:14 +08:00
zzy
e79984592e
fix(argparse): 修复位置参数处理中的类型转换问题
...
在处理位置参数时,将 scc_vec_size 的返回值显式转换为 int,
以避免潜在的类型不匹配问题。
fix(pproc): 修复宏展开中的类型转换问题
在多个位置将 scc_vec_size 的返回值显式转换为 int,
确保比较操作的类型一致性。
fix(pproc): 修复头文件包含深度检查的类型转换
将文件栈大小检查中的 scc_vec_size 返回值转换为 int,
保持类型一致性。
fix(sstream): 修复位置日志中未使用的变量警告
更新未使用变量的声明方式,将逗号分隔改为分号分隔,
更好地抑制编译器警告。
2026-02-27 17:25:56 +08:00
zzy
72ef3964ce
refactor(pproc): 重构预处理器条件编译逻辑
...
- 提取条件判断逻辑到独立函数 scc_pproc_parse_if_need_skip
- 使用辅助函数 in_if, in_elif, in_else, in_endif 简化条件处理
- 添加宏 __SCC_PPROC_LOG_PNT 统一错误和警告处理逻辑
- 增加嵌套条件测试用例验证非活动状态下的正确行为
2026-02-27 17:06:04 +08:00
zzy
4e2176b7f0
feat(compiler): 添加对裸机环境的支持并改进构建配置
...
- 更新README描述为C语言裸机环境的自举编译器
- 修改justfile中的构建命令,添加--dev参数并将输出文件名从scc.exe改为scc
- 在AST定义中添加SCC_AST_UNKNOWN节点类型
- 修复位置日志格式化中的类型错误
- 实现标准输出流支持,当输出文件为'-'时输出到控制台
- 支持基于环境变量LANG的语言本地化选择
fix(lexer): 改进标记打印功能
- 修复换行符的显示,将实际换行符显示为"\n"
- 改进文件输出逻辑,支持标准输出流
refactor(build): 更新cbuild工具的包含路径
- 将包含路径从"scc_libs"更改为"scc_include"
test: 添加简单的包含测试用例
- 新增测试文件tests/simple/12_include.c用于测试头文件包含功能
2026-02-26 16:07:19 +08:00
zzy
13de9d713b
fix(pproc): 修复预处理器对空行的处理逻辑
...
- 移除了错误的ENDLINE类型提前返回逻辑
- 将ENDLINE类型的处理移到正确的位置
- 添加了针对条件编译中空行的测试用例
fix(cli): 更新include路径参数的帮助文本
- 修正英文帮助文本为"Add directory to the include search paths"
- 修正中文帮助文本为"添加系统头文件到搜索路径"
2026-02-26 10:52:32 +08:00
zzy
f56b13da2c
refactor(format): 移除SCF格式相关文件
...
移除了libs/format目录下的所有文件,包括:
- cbuild.toml构建配置文件
- include/scf.h头文件
- include/scf_impl.h实现头文件
- src/scf.c源文件
- tests/test_scf.c测试文件
- tests/test_scf_x64.c x64架构测试文件
这些文件包含了SCF(scc format)格式的完整实现,但现在不再需要。
feat(lexer): 添加布尔字面量数字生成函数
在lexer工具头文件中添加了两个内联函数用于生成布尔值的数字字面量:
- scc_lexer_gen_number_true: 将token类型设为整数字面量,值为"1"
- scc_lexer_gen_number_false: 将token类型设为整数字面量,值为"0"
refactor(lexer): 改进词法分析器错误处理
- 移除了多余的头文件包含
- 更新错误报告方式,使用SCC_ERROR宏替代LEX_ERROR,提供更准确的错误位置信息
refactor(pproc): 更新预处理器扩展器数据结构
- 将need_rescan字段类型从int改为cbool
- 添加need_parse_defined字段用于控制defined操作符解析
- 更新函数签名以支持defined操作符解析参数
2026-02-26 10:25:45 +08:00
zzy
d2eaf2247f
build: 重命名许可证文件名
...
将文件名从 LISENCE 更正为 LICENSE,修正拼写错误。
2026-02-23 16:44:31 +08:00
zzy
51869bf081
feat(pproc): 改进宏处理器以支持括号嵌套和GNU扩展
...
- 实现了括号深度跟踪来正确分割带括号的宏参数
- 添加了对 GNU 扩展中 `##` 操作符逗号删除的支持
- 新增辅助函数 `got_left_non_blank` 和 `got_right_non_blank`
来优化查找非空白 token 的逻辑
- 改进了错误消息以显示预期但得到的实际值类型
fix(pproc): 修复条件编译和包含文件路径的错误消息
- 在 `scc_pproc_parse_if_condition` 中改进错误消息格式
- 修复 `switch_file_stack` 函数中的日志字符串格式问题
test(pproc): 添加宏处理相关的单元测试
- 增加了连接操作符、嵌套宏、括号处理等测试用例
- 添加了 C99 标准示例和 GNU 变参宏删除逗号的测试
- 包含了复杂的宏展开场景测试
chore(justfile): 更新构建脚本添加调试目标
- 为 `test-scc` 目标添加了 `debug-scc` 调试版本
- 更新构建命令以支持开发模式
feat(cbuild): 添加 dry-run 模式和改进编译器参数
- 为编译器类添加 dry-run 功能,只打印命令不执行
- 改进 scc 编译器的包含路径处理逻辑
- 为命令行解析器添加 dry-run 参数选项
refactor(log): 重命名 static_assert 为 StaticAssert 避免冲突
- 为了避免与标准库冲突,将自定义 static_assert 重命名为 StaticAssert
style(scc_core): 移除未使用的预定义宏定义
- 删除了不再需要的基础类型前缀宏定义
fix(scc_core): 初始化 ring 测试中的未初始化变量
- 为测试函数中的字符变量添加初始化值避免未定义行为
2026-02-21 23:53:44 +08:00
zzy
3b2f68111e
chore(license): 添加MIT许可证文件
...
向项目中添加MIT许可证,明确软件使用的条款和条件,
包括版权声明、许可声明以及免责声明等内容。
2026-02-21 16:46:38 +08:00
zzy
4940b652eb
feat(cbuild): 添加SCC编译器支持并更新构建脚本
...
添加了新的SccCompiler类以支持SCC编译器,包括编译和链接功能。
更新了justfile中的构建任务,添加了clean、build、build-install和test-scc等新任务。
同时修复了异常处理语法错误并将wc.py工具文件移除。
2026-02-21 16:02:53 +08:00
zzy
8007825800
feat(pproc): 实现预处理器条件编译和可变参数宏支持
...
- 添加了完整的条件编译功能,包括 #if、#elif、#else、#endif 指令
- 实现了数值常量表达式的解析和求值
- 支持嵌套条件编译和与其他指令混合使用
- 实现了可变参数宏定义和 __VA_ARGS__ 替换功能
- 改进了宏展开机制以正确处理可变参数宏
- 重构了预处理器指令处理逻辑,提高了代码可维护性
- 添加了相应的单元测试用例验证新功能
2026-02-21 15:59:31 +08:00
zzy
b705e5d0ad
feat(argparse): 添加列表类型参数支持
...
新增 scc_argparse_list_t 类型用于处理多个字符串值的参数,
并添加相应的配置函数 scc_argparse_spec_setup_list。
fix(lexer): 调整关键字标记处理逻辑
将关键字子类型从 SCC_TOK_SUBTYPE_KEYWORD 改为
SCC_TOK_SUBTYPE_IDENTIFIER,并移除相关的枚举定义。
refactor(lexer): 优化跳过换行功能实现
修改 scc_lexer_skip_until_newline 函数实现,改进循环逻辑和错误处理。
feat(pproc): 完善预处理器条件编译支持
重构条件编译状态管理,添加对 #ifdef、#ifndef、#elifdef、
#else、#endif 等指令的支持,并实现嵌套条件处理。
refactor(pproc): 优化文件包含路径处理
添加最大包含深度限制,改进包含路径添加功能,
修复文件状态结构命名。
docs(log): 更新日志模块标准库依赖
调整 stdarg.h 包含逻辑,更新编译器内置宏定义名称。
feat(core): 扩展核心类型定义
添加基础数据类型别名定义,完善类型系统支持。
feat(main): 实现命令行包含路径参数
添加 -I/--include 参数支持,允许用户指定额外的头文件搜索路径。
2026-02-21 10:46:49 +08:00
zzy
9c2b4db22a
feat(pproc): 修改include解析函数以支持位置信息传递
...
修改了scc_pproc_parse_include函数签名,添加了token参数用于传递位置信息,
使得在处理包含指令时能够提供更准确的错误定位。同时更新了文件切换逻辑,
将位置信息传递给错误日志,提高调试效率。
2026-02-20 14:28:11 +08:00
zzy
bc0b1d23e3
feat(pproc): 添加预处理器包含路径支持和改进头文件查找逻辑
...
添加了新的类型定义 scc_pproc_cstr_vec_t 用于存储包含路径,
并在 scc_pproc 结构中添加 include_paths 字段。实现改进的
switch_file_stack 函数,支持从当前目录、父目录和系统包含路径
中查找头文件,提供更完整的 #include 指令处理能力。
fix(core): 重命名环形缓冲区内联宏避免命名冲突
将 scc_ring_phys 宏重命名为 _scc_ring_phys,并添加其他相关
内部宏如 _scc_ring_cap、_scc_ring_head 等,以避免与外部接口
的命名冲突并提高代码清晰度。
refactor(main): 添加命令行包含路径选项并清理标准库引用
在命令行参数解析中添加 -I/--include 选项支持,允许用户指定
额外的头文件搜索路径。同时移除不必要的 stdio.h 引用并清理
一些调试相关的缓冲区设置。
2026-02-19 19:30:00 +08:00
zzy
a52ff33e30
feat(ast): 更新AST字面量表示方式
...
更新AST定义以使用词素字符串代替常量值,
并修改AST转储功能以正确显示字面量内容。
BREAKING CHANGE: AST表达式结构体中literal成员从value改为lexme字段。
refactor(pproc): 重构宏展开和文件包含逻辑
将宏展开函数重构为独立接口,实现文件包含处理逻辑,
改进预处理器的状态管理机制。
fix(sstream): 修复文件流初始化错误码返回
修正文件打开失败时的错误码返回值,确保调用方能正确处理异常情况。
2026-02-19 15:56:05 +08:00
zzy
27a87d17ab
feat(lexer): 改进预处理器token测试用例并修复##符号处理
...
- 将"##" token从SCC_TOK_SHARP修正为SCC_TOK_SHARP_SHARP
- 添加更多预处理器指令测试用例,包括宏定义、错误和警告指令
- 修正序列测试中的##符号处理
fix(pproc): 完善预处理器指令处理逻辑
- 实现#error和#warning指令的具体处理逻辑
- 添加对字符串字面量的错误和警告消息输出
- 优化未处理指令的错误处理流程
fix(pproc): 修复词法分析器流处理边界条件
- 在scc_pproc.c中添加对token获取失败的检查
- 防止在流结束时出现未处理的边界情况
2026-02-19 12:14:56 +08:00
zzy
08a60e6e8a
feat: 添加预处理器宏定义的字符串化和连接操作支持
...
- 实现了 # 和 ## 预处理器操作符的功能
- 添加了 token 深拷贝和移动函数以支持宏展开
- 修改预处理器展开逻辑以正确处理宏参数替换
- 增加了宏参数分割时对空白字符的处理
fix: 修复预处理器宏展开中的内存管理和逻辑错误
- 修正了宏展开集合的数据结构初始化方式
- 修复了函数式宏调用时括号匹配的判断逻辑
- 改进了宏参数解析过程中空白字符的处理
- 解决了 token 在宏展开过程中的所有权管理问题
chore: 为 justfile 添加文件统计命令并优化构建配置
- 新增 count-file 命令用于统计代码文件数量
- 调整了输出文件的默认命名规则
- 优化了词法分析器 token 释放时的字段重置逻辑
2026-02-19 11:20:01 +08:00
zzy
c86071416d
feat(pproc): 实现宏展开功能并重构宏定义接口
...
- 新增 pproc_expand.h 头文件,定义宏展开相关的数据结构和函数接口
- 重命名宏相关类型和函数,将 scc_pp_* 前缀统一改为 scc_pproc_*
- 修改宏参数解析逻辑,支持更灵活的参数处理方式
- 实现完整的宏展开功能,包括对象宏和函数宏的展开
- 添加字符串化操作符 (#) 的支持
- 改进预处理器主循环逻辑,优化宏展开流程
- 更新单元测试用例,增加对宏参数解析和字符串化的测试
2026-02-18 18:18:57 +08:00
zzy
9d85dc130d
feat(lexer): 添加词法分析器对##操作符的支持
...
- 重命名lexer_token.h为scc_lexer_token.h以保持命名一致性
- 在词法分析器中实现##操作符的识别和处理
- 修改头文件包含路径和类型定义的位置
- 修复token结构体定义的顺序问题
fix(lexer): 初始化lexer中的cur变量避免未初始化问题
- 在scc_lexer_get_token函数中初始化scc_sstream_char_t cur变量
refactor(core): 增强ring缓冲区功能并添加cstring比较函数
- 在scc_core_ring.h中添加空值检查防止fill函数为空时崩溃
- 添加scc_ring_by_buffer宏用于通过缓冲区创建ring实例
- 在scc_core_str.h中添加scc_cstring_cmp函数用于字符串比较
2026-02-18 18:17:52 +08:00
zzy
2de5ae59f5
feat(pproc): 实现C语言预处理器功能并重构项目依赖
...
- 新增预处理器库(pproc),替代原有的pprocessor模块
- 实现完整的宏定义解析功能,支持对象宏和函数宏
- 添加条件编译指令处理(#if、#ifdef、#ifndef、#else、#elif、#endif)
- 实现宏展开机制,包括嵌套宏和递归宏处理
- 添加宏定义测试用例,覆盖基本功能和复杂场景
- 在cbuild.toml中更新依赖配置,移除parser、ast、ast2ir、ir等未完成模块
- 新增lexer工具函数用于token流处理
- 添加宏定义表管理功能,支持宏的创建、查找、删除操作
- 实现宏参数解析和替换列表处理
2026-02-17 22:47:25 +08:00
zzy
681a15cb44
feat(lexer): 添加预处理器关键字支持并优化词法分析器
...
添加了完整的C预处理器关键字表,包括define、include、ifdef等关键字,
用于支持预处理器功能。
- 新增SCC_PPKEYWORD_TABLE宏定义所有预处理器关键字
- 在token类型枚举中包含预处理关键字
- 重构词法分析器以正确识别预处理关键字
- 添加scc_lexer_tok_drop函数用于清理token资源
refactor(lexer): 重构词法分析器内部结构
- 修复keywords数组字段名从tok到tok_type
- 优化scc_lexer_get_valid_token使用while循环替代do-while
- 修改fill_token和fill_valid_token返回类型为cbool
- 调整lexer_to_ring参数语义更清晰
fix(sstream): 修正环形缓冲区填充函数返回类型
- 将fill_func返回类型从int改为cbool以保持一致性
- 更新SCC_RING宏文档说明fill回调函数返回值含义
docs(argparse): 重命名examples目录修复路径错误
- 将libs/argparse/example重命名为libs/argparse/examples保持一致性
test(lexer): 更新测试用例适配新的流接口
- 修改测试代码中的scc_sstream_ref_ring为scc_sstream_to_ring
- 确保测试用例与新的API保持兼容
style(lexer): 更新示例程序日志级别和实现方式
- 将调试日志改为信息日志
- 使用环形缓冲区实现示例程序的token获取
2026-02-16 22:27:09 +08:00
zzy
b4929be6b8
refactor(lexer): 重构词法分析器头文件结构并优化缓冲区管理
...
移除了旧的lexer_stream.c实现,引入新的环形缓冲区机制来替代原有的
动态数组缓冲区。更新了词法分析器的核心数据结构,修改了token获取
相关函数的实现以支持新的缓冲区管理方式。
BREAKING CHANGE: 移除了scc_lexer_stream_t相关的API,替换为基于
环形缓冲区的新接口scc_lexer_to_ring和相关函数。
feat(lexer_token): 添加词法分析结果内存泄漏警告注释
docs: 移除预处理器模块的测试文件和相关配置
2026-02-16 21:21:23 +08:00
zzy
0e7dec202a
refactor(lex_parser): 移除旧的词法解析器实现并更新依赖
...
移除了 libs/lex_parser 目录下的所有头文件和源文件,包括:
- lex_parser.h 和 lex_parser.c 核心解析功能
- 所有测试文件(test_char.c, test_identifier.c, test_number.c,
test_skip_block_comment.c, test_skip_line.c, test_string.c)
更新了 lexer 模块的依赖配置,将 lex_parser 替换为 sstream,
同时更新了 lexer.h 中的相关包含头文件和数据结构定义,
简化了 scc_lexer_t 结构体的字段。
2026-02-16 16:56:40 +08:00
zzy
088050c903
feat(argparse): 添加选择类型支持和错误处理优化
...
添加了 SCC_ARGPARSE_ERR_PNT_DEFAULT 错误类型用于默认操作处理,
实现了 scc_argparse_spec_setup_choices 函数支持枚举选择,
重构了错误处理流程使返回值更加一致。
修复了长选项名称匹配的逻辑错误。
feat(lexer): 添加换行符和注释符号的词法标记
新增 SCC_TOK_ENDLINE 和 SCC_TOK_SHARP 标记类型,
改进词法分析器对换行符和井号的识别处理。
feat(scc_core): 添加常用宏定义
添加 scc_min 和 scc_max 宏定义提供基础数值比较功能。
feat(main): 实现编译器主程序和命令行接口
创建主程序入口实现完整的编译流程,
集成预处理器、词法分析、语法分析和IR生成模块,
添加AST和IR输出功能支持调试查看中间表示。
chore(build): 配置项目构建依赖关系
创建 cbuild.toml 配置文件定义项目包信息和依赖库,
建立编译器各组件库之间的依赖关系管理。
2026-02-13 17:26:50 +08:00
zzy
ffee07a03d
feat(ir): 添加线性IR转储功能并改进AST转储
...
- 实现了IR的线性转储功能,包括类型、节点、基本块和函数的线性表示
- 添加了scc_ir_dump_ctx_init函数用于初始化转储上下文
- 为AST函数类型添加了变参标记注释说明
- 改进了AST转储中函数类型的参数和返回值显示逻辑
- 统一了AST解析中节点类型的声明为通用的scc_ast_node_t指针类型
fix(lexer): 改进词法分析器错误信息显示
- 在不支持字符的错误信息中添加十六进制编码显示
- 便于调试时识别特殊不可打印字符
2026-02-13 09:56:42 +08:00
zzy
191cdcef53
feat(argparse): 实现高级命令行参数解析库
...
- 添加完整的参数解析API,支持子命令、选项和参数定义
- 实现多种数据类型支持:字符串、布尔值、整数、浮点数、枚举等
- 添加约束规范结构体,支持必填项、多值、隐藏选项等功能
- 实现国际化支持,包含中英文错误提示和帮助信息
- 添加模糊匹配功能,当用户输入错误参数时提供相似建议
- 实现详细的帮助信息打印功能,包括使用方法、选项说明等
- 修改底层optparse库,优化选项处理和错误报告机制
- 添加向量类型支持用于管理参数、选项和子命令集合
2026-02-12 21:41:57 +08:00
zzy
34d7eb3c42
feat(argparse): 重构命令行参数解析器以支持更灵活的参数处理
...
将optparse库的API进行了重大改进,包括:
- 修改结构体字段为const类型以提高安全性
- 添加了宏定义SCC_OPTPARSE_OPT和SCC_OPTPARSE_OPT_END用于简化选项定义
- 重构了解析逻辑,引入greedy_mode和current状态跟踪
- 改进了短选项和长选项的解析机制
- 添加了参数计数验证功能(min_args/max_args检查)
- 调整了函数返回值,parse函数现在返回int类型表示是否还有更多参数
- 完善了错误处理和边界条件检查
2026-02-06 17:33:43 +08:00
zzy
d1b215861c
feat(argparse): 新增命令行参数解析库
...
新增 argparse 库的基础框架,包含以下组件:
- 创建了 argparse 库的 cbuild.toml 配置文件,定义包信息和依赖关系
- 实现了核心的参数解析功能,包括 optparse.h 和 optparse.c
- 定义了参数解析相关的数据结构和枚举类型
- 实现了完整的命令行选项解析逻辑,支持长短选项、参数绑定等功能
- 添加了全面的单元测试,覆盖各种使用场景和边界情况
- 包含对短选项连写、长选项等号形式、选项终止符等特性的支持
2026-02-03 12:35:45 +08:00
zzy
2a90e165a5
feat(ast): 重构AST转储功能并创建AST到IR转换器
...
- 重构ast_dump.c中的宏定义,简化PRINT_VALUE、PRINT_NODE、
PRINT_QUOTED_VALUE等宏的实现
- 移除冗余的PRINT_COLORED宏定义
- 统一使用SCC_TREE_DUMP_PRINT_PURE和SCC_TREE_DUMP_PRINT_AROUND
宏进行转储输出
- 在dump_stmt_impl函数中优化节点转储逻辑,统一使用end_node_dump
替代手动换行
- 添加对未知节点类型的警告日志输出
- 创建新的ast2ir模块,包含AST到IR的基本转换功能
- 实现ast_type_to_ir_type、ast_expr_to_ir、ast_stmt_to_ir、
ast_decl_to_ir等核心转换函数
- 更新IR库依赖配置,添加scc_utils和tree_dump依赖
- 新增IR基础接口定义文件ir_base.h和IR构建器接口ir_builder.h
2026-01-30 23:01:55 +08:00
zzy
c8bf98525d
chore(build): 更新构建脚本和配置文件
...
- 修改justfile中的构建命令,将build-lexer重命名为build_lexer
- 添加count命令用于统计代码行数
- 更新docs命令依赖关系
feat(docs): 完善README文档内容
- 更新项目名称为Simple C Compiler,简化为`scc`
- 添加详细的构建说明,介绍cbuild构建工具
- 补充标准C语言文档链接
- 重新组织项目特点描述
refactor(tree_dump): 修复未使用的返回值警告
- 在tree_dump_pop_level函数中添加(void)强制转换
- 解决scc_vec_pop返回值未被使用的问题
chore(gitignore): 添加新的忽略文件类型
- 增加.dot和.svg文件类型的忽略规则
- 保持.gitignore文件结构清晰
2026-01-30 14:18:07 +08:00
zzy
135e874a76
feat(ast): 重构AST转储功能并添加tree_dump依赖
...
- 添加tree_dump库作为依赖项到ast模块
- 将ast_dump.h中的转储上下文结构替换为tree_dump.h中的统一实现
- 更新scc_ast_block_item_vec_t类型定义,支持stmt或decl的泛型指针
- 移除ast_dump.c中重复的缩进和上下文管理代码,使用tree_dump提供的功能
- 修改dump函数参数类型从scc_ast_dump_ctx_t为scc_tree_dump_ctx_t
- 在libs目录下新增tree_dump库,包含完整的树形结构转储功能
2026-01-28 17:29:56 +08:00
zzy
79ee7a657a
feat(ast): 添加AST定义和dump工具头文件
...
新增libs/ast模块的基础定义文件,包括:
- AST节点类型枚举定义,涵盖声明、语句、表达式、类型等各类节点
- AST操作符枚举,定义所有二元、一元、逻辑、算术等操作符
- AST节点结构体定义,包含表达式、语句、声明、类型等具体实现
- AST dump工具接口,支持树形结构输出和颜色显示
- 语义分析回调函数类型定义,为后续语义分析提供基础
2026-01-28 15:44:59 +08:00
zzy
e1cd8c5206
feat(lexer): 添加SCC语言扩展关键字支持并重构标准定义
...
- 将SCC_CEXT_ASM重命名为SCC_CEXT_SCC以更好地反映扩展类型
- 为asm关键字添加SCC_CEXT_SCC标准标识
- 新增atomic、auto、bool、complex四个关键字及其对应的token类型
- 所有新关键字都标记为SCC_CEXT_SCC扩展标准
fix(lexer): 修复数字字面量解析中的类型不匹配问题
- 将token->value.n更正为token->value.u以正确存储解析结果
- 统一了词法分析器中数值解析的字段访问
refactor(log): 重构日志系统API设计并增强功能
- 将日志处理器接口从void返回改为int返回类型
- 新增函数名记录功能,通过__func__宏获取当前函数名
- 引入可变参数支持,允许格式化字符串传递
- 重构内部宏实现,使用SCC_LOG_IMPL统一处理逻辑
- 改进缓冲区管理,优化日志消息格式化流程
- 重命名头文件保护宏从__SCC_LOG_H__到__SCC_LOG_IMPL_H__
- 替换snprintf为vsnprintf以支持可变参数处理
- 更新断言宏实现,提供更清晰的错误信息格式
2026-01-28 15:44:24 +08:00
zzy
84cff78b86
feat(lexer): 在换行符处理时添加流回退功能
...
在词法分析器中遇到换行符时,添加对 scc_probe_stream_back 的调用,
以确保流探针位置正确回退。同时修正了 probe_stream_t 接口定义中的
注释说明,明确 back 函数的作用是后退探针位置而非头指针位置。
修复了内存探针流实现中回退逻辑的边界条件判断,
现在能够正确处理探针位置的回退操作。
2026-01-11 14:20:54 +08:00
zzy
6c801fbb92
refactor(lexer): 移除未使用的期望函数并修复内存分配错误
...
移除了 scc_lexer_tok_expect 函数,因为它不再被使用。
在 lexer_stream_extend 函数中添加了返回语句,以在内存重新分配失败时正确处理错误。
BREAKING CHANGE: 移除了 scc_lexer_tok_expect 函数
2026-01-10 17:43:31 +08:00
zzy
c01e6e1db4
feat(ir): 添加IR库的基础结构和定义
...
- 创建IR库的cbuild.toml配置文件,添加对scc_core的依赖
- 新增ir_def.h头文件,定义IR类型、节点、基本块和函数的数据结构
- 添加ir_builtin.h和ir_builtin.c,提供内置的i32类型和零值常量
- 实现ir_dump.h和ir_dump.c,提供IR转储功能的接口
- 创建scc_ir.h和scc_ir.c,实现IR对象的初始化和分配功能
- 添加测试文件test_ir.c用于验证IR库功能
- 定义了完整的IR节点类型枚举和操作类型枚举
2026-01-08 13:43:35 +08:00
zzy
b753ae0911
refactor(lex_parser): 重命名libcore为scc_core并重构头文件包含
...
- 将依赖项从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中的宏定义以支持标准库模式
2026-01-08 11:22:27 +08:00
zzy
09f4ac8de0
feat(lex_parser, pprocessor): replace consume with next and remove stream resets
...
- Replace `scc_probe_stream_consume` with `scc_probe_stream_next` for consistent stream advancement
- Remove redundant `scc_probe_stream_reset` calls before peeking, as `next` and `peek` handle state
- Update `scc_cstring_new` to `scc_cstring_create` and `scc_pos_init` to `scc_pos_create` for naming consistency
- Change `scc_pp_macro_get` parameter to `const scc_cstring_t*` for better const-correctness
- Improves code clarity and maintains proper stream position tracking
2025-12-28 10:49:29 +08:00
zzy
07f5d9331b
feat(lexer, preprocessor): replace cstring conversion with copy and refactor macro expansion
...
- Replace `scc_cstring_from_cstr(scc_cstring_as_cstr(...))` with `scc_cstring_copy()` in lexer to fix memory leaks
- Extract macro expansion logic into separate `expand_macro.c` file
- Remove `expand_stack` parameter from `scc_pp_expand_macro()` function
- Add new parsing functions for macro replacement lists and arguments
- Add string utility functions for whitespace trimming and string joining
- Update memory stream documentation for clarity
2025-12-15 20:24:39 +08:00
zzy
73d74f5e13
refactor(pprocessor): rename macro table type and update function names
...
- Change `scc_macro_table_t` to `scc_pp_macro_table_t` for consistency
- Rename `scc_pp_macro_create` to `scc_pp_macro_new` for naming convention
- Remove unused `scc_pp_compress_whitespace` function
- Update macro table function names: `scc_pp_find_macro` → `scc_pp_macro_table_get`, `scc_pp_remove_macro` → `scc_pp_macro_table_remove`
- Add new `scc_pp_macro_table_set` function for setting macros
- Update all function signatures to use new type name
- Remove commented-out whitespace compression code from implementation
2025-12-14 12:59:03 +08:00
zzy
ce8031b21f
feat(parse): implement # and ## operator handling in macro expansion
...
- Add support for # (stringify) and ## (concatenation) operators in macro replacement lists
- Implement scc_pp_expand_string_unsafe() to process operator tokens during macro expansion
- Add helper macros to identify blank, stringify, and concatenation tokens in replacement lists
- Include missing headers (ctype.h, string.h) for character handling functions
- Update object macro expansion to use new string expansion function instead of simple concatenation
- Improve whitespace handling in macro replacement parsing to prevent interference with operator processing
2025-12-13 18:29:21 +08:00
zzy
07a76d82f4
feat(lex_parser, pprocessor): rename identifier header check and add macro system
...
- Rename `scc_lex_parse_is_identifier_header` to `scc_lex_parse_is_identifier_prefix` for clarity and add a TODO comment
- Update lexer to use the renamed function for consistency
- Fix package and dependency names in `cbuild.toml` (`smcc_pprocesser` → `scc_pprocesser`, `smcc_lex_parser` → `lex_parser`)
- Introduce new macro system with header file `pp_macro.h` defining macro types, structures, and management functions
- Refactor preprocessor initialization and cleanup in `pprocessor.c` to use new macro table and stream handling
- Replace legacy `hashmap` with `scc_pp_macro_table_t` for macro storage
- Improve error handling and resource management in preprocessor lifecycle
2025-12-13 16:09:46 +08:00
zzy
874a58281f
feat(lex_parser): rename functions and update header guard prefix
...
- Change header guard from `__SMCC_LEX_PARSER_H__` to `__SCC_LEX_PARSER_H__`
- Prefix all lexer functions with `scc_` (e.g., `lex_parse_char` → `scc_lex_parse_char`)
- Add new helper function `scc_lex_parse_is_identifier_header`
- Update references in source and test files to use new function names
- Replace `core_stream_eof` with `scc_stream_eof` for consistency
2025-12-13 14:06:13 +08:00
zzy
94d3f46fac
refactor(lex_parser): replace core_pos_* functions with scc_pos_* equivalents
...
Update all position tracking calls in lex_parser.c to use the scc_pos_* function family (scc_pos_next, scc_pos_next_line) instead of the deprecated core_pos_* variants. This ensures consistency with the scc naming convention and prepares for future removal of the old core functions.
2025-12-12 21:33:51 +08:00
zzy
897ef449fb
feat: add atomic profile update flag and update clean command
...
- Add `-fprofile-update=atomic` flag to both GCC and Clang compiler configurations for thread-safe coverage data updates
- Change `--all` argument in clean command to default to True and add `-a` short option for consistency with common CLI patterns
2025-12-11 17:30:33 +08:00
zzy
3aaf3a3991
feat: add SCF format library and rename components to SCC prefix
...
- Introduce new SCF (SCC Format) library with header, implementation, and test files
- SCF is a minimal executable/linkable format focused on internal linking with external symbol import/export abstraction
- Rename lexer and lex_parser packages from 'smcc_' to 'scc_' prefix for consistency
- Update hashmap implementation to use 'scc_' prefix for types and structures
- Add build configuration for new format library with dependencies on libcore and libutils
2025-12-11 17:29:12 +08:00
zzy
d88fa3b8d3
feat: rename core types to scc prefix for consistency
...
Updated type names from `core_*` to `scc_*` across lex_parser and stream modules to maintain naming consistency within the SCC codebase. This includes changes to function signatures and internal usage of types like `core_probe_stream_t`, `core_pos_t`, and `cstring_t` to their `scc_*` counterparts.
2025-12-11 13:00:29 +08:00
zzy
35c13ee30a
feat: add internationalization support with Chinese translations
...
- Introduce Translator class for simple i18n with English and Chinese locales
- Add concurrent.futures, os, and locale imports for parallel execution and language detection
- Implement automatic language detection based on system locale
- Provide translation keys for build messages, test results, and command outputs
- Support dynamic language switching via set_language method
2025-12-11 12:27:11 +08:00
zzy
098e41d3e5
feat(cbuild): refactor and enhance C build system with new features
...
- Refactor logging system with simplified ColorFormatter and improved output formatting
- Add test command with regex pattern matching and timeout support
- Implement file size formatting utility for build output
- Remove unused imports and streamline code structure
- Update .gitignore to exclude external/ directory
- Improve error handling and subprocess management in test execution
- Optimize build dependency resolution with topological sorting
- Enhance configuration parsing and target management
The changes focus on code quality improvements, adding testing capabilities, and optimizing the build process for better performance and maintainability.
2025-12-10 22:21:37 +08:00
zzy
186602a301
feat(core): rename string and stream functions for clarity
...
- Rename `cstring_push` to `cstring_append_ch` and `cstring_push_cstr` to `cstring_append_cstr` for consistent naming with new `cstring_append` function
- Update all callers in lexer and tests to use new function names
- Rename stream `destroy` method to `drop` for consistency with resource management conventions
- Fix potential overflow in string capacity calculation by adjusting growth logic
2025-12-09 18:04:53 +08:00