Commit Graph

10 Commits

Author SHA1 Message Date
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
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
79ee7a657a feat(ast): 添加AST定义和dump工具头文件
新增libs/ast模块的基础定义文件,包括:
- AST节点类型枚举定义,涵盖声明、语句、表达式、类型等各类节点
- AST操作符枚举,定义所有二元、一元、逻辑、算术等操作符
- AST节点结构体定义,包含表达式、语句、声明、类型等具体实现
- AST dump工具接口,支持树形结构输出和颜色显示
- 语义分析回调函数类型定义,为后续语义分析提供基础
2026-01-28 15:44:59 +08:00