673 Commits

Author SHA1 Message Date
6dc651d305 feat: 支持结构体多个构造函数
- 修改 SignatureRegistrar 类以支持结构体的多个构造函数
- 通过参数个数区分重载的构造函数
- 为每个构造函数解析参数类型并设置返回类型为 void
2025-09-01 16:51:58 +08:00
5367fc39f6 feat: 优化结构体构造函数选择逻辑
- 支持构造函数重载:根据实参个数选择合适的构造函数
- 改进错误提示:增加未找到对应形参个数构造函数的提示
- 保留零参数构造的旧行为:当结构体未声明任何 init 且调用为 0 实参时,允许隐式默认构造
- 优化代码结构:调整注释格式,提高代码可读性
2025-09-01 16:42:59 +08:00
4ac95dd5ef feat: 支持 Struct 多构造函数降级
- 修改 lowerAndRegisterStruct 方法以支持多个构造函数
- 为每个构造函数生成独立的降级版本,命名格式为 StructName.__init__N
2025-09-01 16:42:00 +08:00
5f6751b3d4 feat: 支持结构体初始化构造器调用
- 在 new 表达式中添加结构体初始化逻辑
- 生成空列表后,依次填充构造参数
- 若为结构体类型,显式调用 __init__构造器方法
- 优化了字段访问和数组初始化的代码结构
2025-09-01 16:39:52 +08:00
6428ba5cbd feat: 增强结构体打印细节
- 添加结构体继承关系打印
- 优化字段、构造函数和方法的打印顺序
- 改进打印格式,提高可读性
2025-09-01 15:50:32 +08:00
808403e8e8 feat: 支持类继承和多构造函数的序列化
- 在 StructNode 中添加 parent 属性,用于表示父类- 支持多构造函数的序列化,将 inits 参数替换单个 init 参数
- 优化 methods 参数的序列化逻辑,增加空值检查
- 重构部分代码,提高可读性和维护性
2025-09-01 15:47:21 +08:00
5c48f4038b test: 重构 Student 类并简化 Main 函数 2025-09-01 15:33:33 +08:00
fefb44cda7 chore: 添加 Demo32运行配置 2025-09-01 14:10:58 +08:00
783be100e7 test: 增加 Demo32 2025-09-01 14:10:31 +08:00
981a1eacdb feat: 增强 VMProgramBuilder 功能并优化代码结构
- 优化类注释,明确 VMProgramBuilder 的职责和功能
- 重构部分方法名称,提高代码可读性
- 添加 super 调用支持和更灵活的符号匹配机制
- 优化 CALL 和 BRANCH指令的修补逻辑
- 添加辅助方法 lastSegment,提高代码复用性
2025-09-01 12:18:36 +08:00
9e322f3d87 refactor: 优化 IRProgram 构建过程并完善结构体布局处理
- 简化 buildProgram 方法的注释,使流程描述更加清晰
-重写 preloadStructLayouts 方法,增加对结构体继承的支持
- 调整 globalConstPreload 方法的注释,明确其功能
- 在 buildScriptMainFunction 方法中添加占位符,避免依赖真实位置信息
2025-09-01 11:03:21 +08:00
04b43cbd5a refactor: 将 getStructLayout 方法改为静态方法
- 修改了 IRBuilderScope 类中的 getStructLayout 方法,将其从实例方法改为静态方法
2025-09-01 10:50:39 +08:00
0cb8abde80 chore: 移除 Demo31.run.xml 中的调试参数 2025-09-01 10:50:10 +08:00
d258297609 feat: 支持结构体继承
- 添加对结构体继承的支持,允许使用 "extends" 关键字定义父结构体
- 修改 StructNode 构造函数以支持父结构体名称参数
- 优化结构体解析逻辑,处理可选的继承语句
2025-09-01 09:23:21 +08:00
426452f63f feat: 支持结构体单继承并优化签名注册逻辑
- 增加结构体单继承支持,子类可继承父类的字段和方法
- 优化函数和方法签名注册流程,移除不必要的降级处理
- 修复结构体继承中的错误处理和字段/方法复制逻辑
2025-09-01 09:23:06 +08:00
8ff103e105 feat: 为结构体添加继承功能
- 在 StructNode 中添加 parent 参数,用于表示父类名称
- 更新 toString 方法以包含 parent 信息
- 优化类注释,移除冗余信息并增加对继承特性的说明
2025-08-31 18:37:42 +08:00
8bc431091c feat: 添加 extends 关键字 2025-08-31 18:34:40 +08:00
ce2b480e90 chore: 添加 Demo31运行配置 2025-08-31 17:56:18 +08:00
9f7628aded test: 添加类继承演示示例 2025-08-31 17:55:49 +08:00
bd37142a4b chore: 添加 Demo30运行配置 2025-08-31 17:38:29 +08:00
f0e3bfe05c test: 添加 Demo30 2025-08-31 17:38:23 +08:00
c99614869f refactor: 重构值拷贝语义的指令生成逻辑
- 移除类型无法推断时默认采用 int 方案的逻辑
- 通过构造 "src + 0" 的形式,触发 Peephole 优化折叠成 MOV
- 优化了不同类型的数据处理逻辑,提高代码可读性和可维护性
2025-08-31 17:31:53 +08:00
67d1949a25 refactor: 移除未使用的作者和版本注释 2025-08-31 17:10:19 +08:00
5ec4f9ec6a test: 修改 Demo29 适配最新语法 2025-08-31 17:03:00 +08:00
a57d666241 feat: 改进 CALL 指令的目标函数匹配逻辑
- 增加简名匹配支持,适用于 IR 中生成的 CALL 指令
-保留原有的全名匹配逻辑
- 优化了 patchCallFixes 方法,提高了匹配效率
2025-08-31 17:02:21 +08:00
416f3fdeb1 refactor: 重构表达式构建逻辑
- 优化常量折叠逻辑,使用 switch-case 结构替代 if-else
- 增加对链式方法调用的支持
- 调整函数调用构建流程,按被调用对象类型分支处理
- 优化参数传递逻辑,区分隐式 this 参数和显式参数- 规范化方法和函数名处理,自动补充模块名前缀
2025-08-31 17:01:10 +08:00
419057c3c2 fix: 修正 getName 方法调用 2025-08-31 15:34:41 +08:00
b4a0bccb66 feat: 增强结构体解析器功能
- 优化结构体声明块的解析逻辑,支持更灵活的语法
- 改进构造函数块的解析,允许参数块和方法体块的自由顺序
- 扩展参数块解析,支持内置类型和自定义标识符作为参数类型
- 修复了一些解析过程中的小问题,提高了代码的健壮性
2025-08-30 17:06:42 +08:00
9ac8b6166a refactor: 重构函数解析器以提高可读性和可维护性
- 优化了函数解析器的结构,使其更加清晰和易于理解
- 改进了错误处理机制,使用更具体的异常类型
- 增加了对类型声明和参数列表的容错性
- 移除了冗余代码和不必要的注释,提高了代码的简洁性
2025-08-30 17:04:49 +08:00
f00d99d748 test: 更新以测试新功能 2025-08-30 17:04:00 +08:00
4b90f15371 test: 添加自定义类型字段嵌套示例
- 新增 Main.snow 文件,定义了 Address 和 Person 两个结构体- 在 Person 结构体中使用 Address 类型的字段,实现类型嵌套
- 添加 OS.snow 文件,提供基本的打印功能- 此示例展示了如何在 SNOBOL 中使用自定义类型进行字段嵌套
2025-08-30 14:25:11 +08:00
cbd8b24c4c chore: 添加 Demo29运行配置
- 新增 Demo29.run.xml 文件
2025-08-30 14:25:01 +08:00
1e832dc8bf test: 添加 Animal 类的 setAge 方法并优化 OS 模块
- 在 Animal 结构体中添加 setAge 方法,用于设置 age 字段
- 在 OS 模块中添加 println函数,实现换行打印功能- 更新 Main 函数,演示使用 setAge 方法和 println 函数
2025-08-30 11:28:56 +08:00
513aeba2bc feat: 支持结构体字段赋值
- 增加对 this.<field> 结构体字段赋值的支持
- 优化赋值语句处理逻辑,优先考虑局部/参数变量- 修复字段写入后的常量绑定问题
- 优化变量声明和初始化流程
2025-08-30 11:28:42 +08:00
cff45a9d17 refactor: 重构 FunctionBuilder
- 优化了 FunctionBuilder 类的文档注释,详细描述了其功能和处理流程
- 改进了 build 方法的内部逻辑,提高了代码可读性和可维护性
- 修复了返回类型为空时的处理逻辑,增加了鲁棒性
- 优化了默认字面量后缀的设置逻辑,提高了代码的灵活性
2025-08-30 11:27:25 +08:00
db720ea357 docs: 更新类文档并移除冗余信息 2025-08-29 18:25:17 +08:00
35fdb25d27 feat: 实现数组自动扩容功能
- 在 SyscallCommand 类中的列表操作中增加了自动扩容逻辑
- 当访问的索引超过当前列表大小时,自动将列表大小扩展到该索引
- 这种实现允许在 append操作时直接使用 set 方法,而不需要额外判断
2025-08-29 18:24:39 +08:00
0c2a888e86 feat: 新增关键字支持
- 在 TokenFactory 类中添加了关键字 "new" 的支持
- 此更新扩展了编译器的词汇分析能力,使其能够识别和处理新的关键字
2025-08-29 18:24:39 +08:00
584e226051 feat: 扩展签名注册器支持结构体类型
- 增加结构体类型签名的登记逻辑,包括构造函数和方法签名
- 优化模块级函数签名的注册流程,提高代码可读性
- 完善导入模块的合法性校验,确保模块存在性
2025-08-29 18:24:39 +08:00
586ede1cf0 refactor: 重构表达式解析器文档和代码
- 更新类文档,使其更清晰地描述 Pratt 表达式解析器的功能和结构
- 优化方法注释,增加对核心解析逻辑的解释
- 调整代码格式,提高可读性
- 补充注释说明前缀和中缀解析器的注册方式及使用场景
2025-08-29 18:24:39 +08:00
17b078b6f3 feat: 增加结构体定义解析并优化模块解析逻辑
- 添加 StructParser 解析器,支持结构体定义解析
- 重构 ModuleParser 解析逻辑,提高代码可读性和可维护性
- 优化模块解析流程,支持空行和灵活的语法结构
- 增加异常处理,提升错误提示的准确性和可读性
2025-08-29 18:24:39 +08:00
fea8e14245 refactor: 重构 ModuleNode 类并增强其文档注释
- 重新组织类的结构,使其更加清晰和易于理解- 增加了对模块节点包含内容的详细注释,包括全局变量、结构体和函数定义
- 优化了 toString 方法的实现,提高了代码可读性
- 补充了对结构体定义列表的处理
2025-08-29 18:24:39 +08:00
49cb89c9f2 feat: 添加用户自定义结构体类型支持
- 新增 StructType 类,用于描述结构体的静态类型信息
- 实现了结构体类型的唯一标识、字段定义、方法签名和构造函数等功能
- 支持跨模块同名结构体的类型检查和兼容性判断
2025-08-29 18:24:39 +08:00
3942a22e67 feat: 添加结构体解析功能
- 实现了结构体声明块的语法解析器 StructParser
- 支持解析结构体字段、构造函数和方法列表
- 添加了构造函数 init 的解析逻辑
- 实现了参数块和方法体块的解析
- 通过 AST 节点表示结构体及其成员
2025-08-29 18:24:39 +08:00
f03a44d2a5 feat: 添加结构体定义的 AST 节点
- 新增 StructNode 类,表示结构体定义
- 包含结构体名称、字段列表、构造函数和方法列表等信息
- 实现了 toString 方法,便于调试和日志查看
2025-08-29 18:24:39 +08:00
1835b85c5c feat: 新增对象创建表达式节点
- 添加 NewExpressionNode 类,表示对象创建表达式
- 该节点用于处理 "new" 关键字实例化类型的语法
- 包含目标类型名、构造函数参数列表和源码位置信息
- 实现了 ExpressionNode 接口,提供获取源码上下文的方法
2025-08-29 18:24:39 +08:00
1ab4fb2e87 feat: 新增对象节点的创建 2025-08-29 18:24:38 +08:00
2abe056056 feat: 新增对象创建表达式语义分析器
- 实现了 NewExpressionAnalyzer 类,负责分析和推断 "new T(args...)" 表达式的类型
- 校验目标类型是否为结构体,参数数量与类型是否匹配构造函数
- 支持数值类型的自动宽化
- 在类型解析失败时提供详细的错误信息
2025-08-29 17:56:09 +08:00
a34f51dee1 feat: 添加模块节点 ModuleNode 类
- 新增 ModuleNode 类作为源文件或逻辑模块的 AST 根节点
- 包含模块名、导入依赖、全局变量、结构体定义、函数定义等信息
- 实现了 toString 方法,便于调试和日志输出
2025-08-29 17:54:06 +08:00
8902748cde feat: 丰富 ModuleInfo 类以支持结构体和更广泛的语义分析
- 新增 structs 字段,用于存储模块中定义的结构体类型
- 扩展类注释,明确 ModuleInfo 的功能和用途
- 优化字段和方法注释,增强代码可读性和易维护性
- 调整部分方法实现,提高模块信息管理的灵活性和安全性
2025-08-29 17:52:42 +08:00