312 Commits

Author SHA1 Message Date
4181ff8ae2 refactor: 移除 StringEscape 类中未使用的 escape 方法
- 删除了 StringEscape 类中的 escape 方法,该方法用于将普通字符串编码为可安全存储的转义字符串
- 保留了unescape方法,并简化了其文档注释
2025-08-27 10:44:44 +08:00
49b5e61e8e feat: 增加字符串字面量的转义符和 Unicode 转义解析
- 引入 StringEscape 工具类用于字符串转义
- 在解析字符串字面量时,去除首尾引号
- 对字符串内部内容进行转义符和 Unicode 转义解析
2025-08-27 10:43:34 +08:00
bc512fd02d feat: 添加字符串转义/反转义工具类
- 新增 StringEscape 类,提供编译期和运行期的字符串转义/反转义功能
- 支持常见控制字符、特殊字符和 Unicode 字符的转义/反转义
- 适用于 .water指令文件的保存和虚拟机执行时的字符串还原
2025-08-27 10:41:19 +08:00
2fc2a93414 feat: 增强引用推送指令功能
- 支持字符串字面量和数组字面量的解析
- 添加对不同数据类型(如浮点数、长整型等)的解析支持
- 优化了代码结构,提高了可读性和可维护性
- 增加了对 Unicode 逃逸序列的支持
- 添加了详细的类和方法注释,提高了文档质量
2025-08-27 10:39:21 +08:00
9bdc6245bf fix: 修复字符串常量在 VM 代码中的表示问题
- 在 LoadConstGenerator 中添加字符串转义功能,确保字符串常量在 VM 代码中正确表示
- 优化 formatConst 方法,对字符串常量进行转义处理
- 新增 escape 方法,用于字符串转义,包括控制字符和非 ASCII 字符的处理
2025-08-27 10:35:23 +08:00
caa62b0bfb feat: 增加模块私有函数访问控制
- 新增规则:以"_"开头的函数名只允许在本模块访问,禁止跨模块访问
- 在 CallExpressionAnalyzer 中实现该规则的检查逻辑
2025-08-26 18:08:46 +08:00
b058ee4526 refactor: 优化全局变量处理和常量折叠逻辑
- 过滤与函数参数重名的全局声明,避免命名冲突
- 优化常量折叠逻辑,支持跨模块常量优化- 修复字符串字面量和布尔字面量的处理
- 优化代码结构,提高可读性和可维护性
2025-08-26 16:29:29 +08:00
c412d1194b feat: 增加全局符号表支持
- 在 ModuleInfo 类中添加 SymbolTable 类型的 globals 字段
- 实现 getGlobals 和 setGlobals 方法,用于获取和设置全局符号表
2025-08-26 14:33:45 +08:00
f39aece9cf feat: 支持模块成员访问的语义分析
- 实现了跨模块常量和全局变量访问的语义分析- 能根据目标模块的全局符号表返回准确的类型信息- 完全支持跨模块类型推断
- 对非模块成员访问的情况增加了错误处理
2025-08-26 14:32:58 +08:00
439304c86a feat: 增强全局常量处理与字面量解析
- 支持整数、浮点数、字符串和布尔字面量的解析
- 添加类型后缀支持(b/s/l/f/d),并进行相应的类型转换
- 优化数字字面量的解析逻辑,支持科学计数法和下划线分隔符
- 改进字面量提取工具的文档注释,明确支持的类型和转换规则
2025-08-26 14:32:13 +08:00
6e31185519 feat: 重构 FunctionChecker 采用两遍扫描策略
- 设计核心:采用“两遍扫描”方案,彻底解决跨模块全局变量/常量类型推断和引用依赖问题
  - 第一遍:为所有模块预先构建并注册全局符号表(globals)
  - 第二遍:在全局符号表全部就绪后,依次分析所有模块的函数体
-功能职责:
  - 遍历所有模块,先建立 globals,再遍历并检查所有函数体语句
  - 为每个函数体构建完整符号表,并注册参数变量
  - 分发每条语句到对应 StatementAnalyzer进行类型检查和错误校验
  - 自动检查非 void 函数 return 完备性
  - 记录所有语义错误,便于前端高亮和诊断
2025-08-26 14:29:37 +08:00
1c86c1dce7 feat: 改进 IR 指令生成逻辑并支持浮点数
- 新增对 long、float 和 double 类型常量加载的支持
- 优化二元运算指令生成,支持不同类型的操作数
- 实现基于变量类型的 move 指令,提高类型兼容性
- 简化控制流指令的生成逻辑
- 优化代码结构,提高可读性和可维护性
2025-08-26 14:01:19 +08:00
0d6c6cef5a feat: 添加成员表达式语义分析器
- 实现了 MemberExpressionAnalyzer 类,用于分析成员访问表达式
- 目前仅支持 ModuleName.constOrVar 形式的跨模块常量/全局变量访问
- 不支持对象成员访问,如 a.b.c- 类型降级为 int,后续由 IR 阶段进行常量折叠
2025-08-26 11:52:47 +08:00
06bb647c83 feat: 实现全局常量预加载及跨模块常量折叠
- 新增 preloadGlobals 方法,扫描所有模块节点,将常量注册到全局常量表- 支持整数、浮点数、字符串和布尔字面量的直接评估
- 优化了 IRProgram 的构建过程,增加了对全局常量的处理
2025-08-26 11:44:04 +08:00
cc66eee75f feat: 支持跨模块全局常量查找
- 新增 externalConsts 字典用于存放跨模块导入的全局常量
- 修改 getConstValue 方法以支持查找外部常量
- 添加 importExternalConst 方法用于导入外部常量
2025-08-26 11:37:05 +08:00
1e2b0e4e0d feat: 新增全局常量表支持跨模块常量管理
- 添加 GlobalConstTable 类,用于编译期间跨模块常量查询和折叠
- 提供注册常量、查询常量和获取所有常量的功能
- 保证线程安全,支持并发操作- 常量的 key采用“模块名.常量名”的格式,确保唯一性
2025-08-26 11:35:08 +08:00
1a0c3a38cb feat: 更新 FunctionBuilder构建流程与文档
- 在全局函数表中注册函数名与返回类型
- 初始化 IRFunction 实例与 IRContext 上下文对象
- 自动导入全局常量(包括跨模块 const 变量)到当前作用域
- 根据函数返回类型设置表达式推断的默认字面量类型后缀
- 遍历声明形参,每个参数分配虚拟寄存器,并注册到作用域
- 依次转换函数体中的每条语句为 IR指令
- 函数体转换完成后,清理默认类型后缀
2025-08-26 11:32:48 +08:00
fcdc3a49f8 feat: 支持成员访问表达式
- 添加对成员访问表达式(如 ModuleA.a)的支持
- 实现 buildMember 方法来处理成员表达式节点
- 增加对全局常量和作用域内常量的处理逻辑
2025-08-26 11:30:20 +08:00
139c42a90e feat: 实现成员访问表达式分析器
- 替换 UnsupportedExpressionAnalyzer 为 MemberExpressionAnalyzer
2025-08-26 11:29:03 +08:00
91aef32a42 feat: 添加常量符号类型并完善文档注释
- 在 SymbolKind 枚举中添加 CONSTANT 类型,用于表示只读、不可变的公开常量- 完善了各符号类型的文档注释,明确其用途和特点
- 优化了代码格式和段落结构,提高了代码可读性
2025-08-26 01:45:00 +08:00
18c9cbad7b feat: 增加常量声明支持并优化变量声明节点
- 在 DeclarationNode 类中添加 isConst 字段,用于表示是否为常量声明
-增加 isConst() 方法以判断声明是否为常量
- 优化类注释,明确变量和方法的作用
- 更新构造函数以支持常量声明
2025-08-26 01:44:16 +08:00
3b39e9059b feat: 添加 const 关键字支持
- 在 TokenFactory 类中的 KEYWORDS 集合中添加了 "const" 关键字
- 此修改为编译器增加了对常量声明的支持,扩展了语言的功能
2025-08-26 01:18:24 +08:00
c44f8a4630 refactor: 优化 declare 语句的标识符处理逻辑
- 允许 declare 后跟随 const 关键字
-调整错误提示信息,使其更加清晰
- 优化代码结构,提高可读性
2025-08-26 01:18:07 +08:00
c4e9e541fb refactor: 优化全局变量声明的错误信息
-根据变量是否为常量,动态设置符号种类
-针对常量和变量分别定制重复声明的错误信息
2025-08-26 01:17:47 +08:00
da7d7bbcaa feat: 增加常量声明支持并优化声明语句解析
- 增加对常量声明的支持,通过匹配 "const" 关键字
-优化代码结构,使用 var tokens变量引用词法 token 流
- 简化代码逻辑,提高可读性和可维护性
2025-08-26 01:17:13 +08:00
d0c34ce1c2 feat: 优化声明语句语义分析
- 重构代码,优化分析流程,增加对常量声明的处理
-改进错误处理和日志输出,提高可读性和调试友好性
- 修复了一些潜在的语义分析问题,如常量未初始化的检查
2025-08-26 01:16:40 +08:00
1872221666 refactor: 优化赋值语句语义分析逻辑 2025-08-26 01:16:26 +08:00
80efd7c357 feat: 添加 os.snow系统库模块 2025-08-24 12:13:23 +08:00
3406e1a2dd refactor: 移除词法分析器中的调试代码 2025-08-22 17:34:53 +08:00
00f73ecb47
!56 refactor: 重构关键字
Merge pull request !56 from zhangxun/feature/refactor-keyword
2025-08-04 09:23:38 +00:00
zhangxun
a9b4a6682a fix: 省略模块函数调用前缀,语义分析依然判定函数存在 2025-08-04 16:37:04 +08:00
zhangxun
3e7e5f2dad feat: 支持标准 URL 格式 2025-08-04 15:01:11 +08:00
zhangxun
d11822f4ba refactor: 重构模板代码 2025-08-04 14:50:10 +08:00
zhangxun
87560db20d refactor: 重构关键字 2025-08-04 14:49:39 +08:00
zhangxun
3a2a1363e6 feat: 增强错误定位 2025-08-04 13:45:23 +08:00
4eb1aff553 Merge branch 'dev' into bugfix/fix-global-redeclare-error 2025-08-03 00:49:18 +08:00
7fab3cc662 feat: 检查全局变量重复声明
- 在 FunctionChecker 类中增加了对全局变量重复声明的检查
- 如果全局变量已经存在,则添加语义错误信息
2025-08-03 00:36:34 +08:00
d3a85a24bf feat: 支持数组元素赋值操作
- 新增 __setindex_x 系列内置函数,用于数组元素赋值
- 实现了对 byte、short、int、long、float、double、boolean 和引用类型数组的支持
- 修改了 ExpressionBuilder 和 StatementBuilder以支持数组赋值语法
- 更新了 VirtualMachineEngine 和 SyscallCommand 以支持新的 ARR_SET系统调用
2025-08-03 00:08:28 +08:00
f61cfa5638 fix: 修复常量类型在 VM 中的表示问题
- 为浮点数添加 f 后缀,避免在 VM 中被错误解释为双精度浮点数
- 为长整数添加 L 后缀,保留类型信息
- 双精度浮点数和整数使用默认格式输出
- 支持数组常量的递归序列化,保留类型信息
- 优化了常量生成逻辑,提高了代码可读性和维护性
2025-08-02 12:32:28 +08:00
f6c877a7a1 refactor: 调整代码格式和注释 2025-08-02 10:51:14 +08:00
b093f8db72 feat: 支持数组下标访问类型分派
- 扩展 __index_i 函数支持 byte、short、int、long、float、double、boolean等类型
- 新增 __index_b、__index_s、__index_l、__index_f、__index_d、__index_r 函数- 优化数组元素访问的 IR 生成逻辑,根据类型选择合适的函数
- 更新 VM 层的 ARR_GET 子命令处理逻辑,支持多种数据类型
2025-08-02 10:49:54 +08:00
102e84bc01 feat: 重构并扩展调用指令生成逻辑
- 优化了 syscall、数组下标访问和普通函数调用的处理逻辑
- 新增对多维数组下标访问的支持
- 改进了字符串常量和寄存器的绑定机制
- 统一了参数加载和错误处理的代码
2025-08-01 23:33:31 +08:00
82f4ba1a6e feat: 支持数组类型及数组字面量
- 新增 ArrayLiteralNode 表示数组字面量表达式节点
- 实现 ArrayLiteralAnalyzer 进行数组字面量的语义分析
- 添加 ArrayType 表示数组类型,并支持多维数组
- 修改 Context 类,增加对数组类型的支持
- 更新 DeclarationStatementParser,支持多维数组类型的声明
- 在 CallGenerator 中添加对特殊函数 __index_i 的处理,用于数组索引操作
2025-08-01 18:34:03 +08:00
b7e9c8121e refactor: 重构 RetCommand 并添加日志记录
- 更新导入语句,明确导入模块
- 使用 LoggingUtils 替代 System.out.println 输出日志
- 添加换行符改善日志可读性
2025-07-31 14:11:09 +08:00
466b6ca2be refactor: 移除 VMCodeGenerator 中的冗余字段
- 删除了 VMCodeGenerator 类中不再使用的 currentFn 字段- 将 currentFn 作为局部变量在 generate 方法中使用
- 这个改动简化了类的结构,减少了冗余代码
2025-07-31 12:48:10 +08:00
cadace165a feat: 改进函数调用和模块处理机制
- 补充模块名以生成全限定函数名,增强模块间调用的准确性
- 重构 IRProgramBuilder 以更清晰地处理模块和函数
- 优化 VMCodeGenerator 和 VMProgramBuilder 以支持新的全限定名机制
2025-07-31 12:43:17 +08:00
1293ac1f83 refactor: 优化数字字面量的语义分析与错误提示
- 重构了类型推断逻辑,支持更精确的类型判断
- 实现了智能的错误提示策略,根据不同情况给出具体建议
- 优化了范围校验逻辑,提高了代码的健壮性
- 改进了代码结构和注释,提高了可读性和可维护性
2025-07-31 00:26:44 +08:00
fdeaa36366 feat: 增强数字字面量的语义分析和错误提示
- 添加类型推断和范围校验逻辑,支持 byte、short、int、long、float 和 double 类型
- 实现溢出和格式错误的统一处理,提供详细的错误提示
- 优化代码结构,增加私有方法以提高可读性和可维护性
2025-07-30 12:03:41 +08:00
63835a1cce refactor: 优化变量声明语句的处理逻辑
- 澄清变量声明语句的处理流程,特别是带有初始值的情况
- 引入新分配的虚拟寄存器,确保变量和初始值表达式中的变量物理上独立
- 优化类型设置和作用域声明的顺序,提高代码的可读性和维护性
2025-07-29 11:50:06 +08:00
7c0a5e2524 docs: 优化 BreakStatementParser 类的文档注释 2025-07-29 11:23:01 +08:00