Commit Graph

12 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
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