|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
84cff78b86
|
feat(lexer): 在换行符处理时添加流回退功能
在词法分析器中遇到换行符时,添加对 scc_probe_stream_back 的调用,
以确保流探针位置正确回退。同时修正了 probe_stream_t 接口定义中的
注释说明,明确 back 函数的作用是后退探针位置而非头指针位置。
修复了内存探针流实现中回退逻辑的边界条件判断,
现在能够正确处理探针位置的回退操作。
|
2026-01-11 14:20:54 +08:00 |
|
|
|
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 |
|