From c412d1194beedeb128803160259a6c1f9ae55dd2 Mon Sep 17 00:00:00 2001 From: Luke Date: Tue, 26 Aug 2025 14:33:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E7=AC=A6=E5=8F=B7=E8=A1=A8=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ModuleInfo 类中添加 SymbolTable 类型的 globals 字段 - 实现 getGlobals 和 setGlobals 方法,用于获取和设置全局符号表 --- .../compiler/semantic/core/ModuleInfo.java | 68 +++++++++++++++---- 1 file changed, 56 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/jcnc/snow/compiler/semantic/core/ModuleInfo.java b/src/main/java/org/jcnc/snow/compiler/semantic/core/ModuleInfo.java index 0761d50..d71dd42 100644 --- a/src/main/java/org/jcnc/snow/compiler/semantic/core/ModuleInfo.java +++ b/src/main/java/org/jcnc/snow/compiler/semantic/core/ModuleInfo.java @@ -1,33 +1,55 @@ package org.jcnc.snow.compiler.semantic.core; +import org.jcnc.snow.compiler.semantic.symbol.SymbolTable; import org.jcnc.snow.compiler.semantic.type.FunctionType; -import java.util.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; /** * {@code ModuleInfo} 表示单个模块在语义分析阶段的元信息封装。 *

- * 用于在分析期间管理模块间依赖、函数签名查找等关键任务。 - * 每个模块对应一个唯一的 {@code ModuleInfo} 实例。 - *

- * 包含信息包括: + * 用于在分析期间管理模块间依赖、函数签名查找、全局符号表等关键任务。 + * 每个模块对应一个唯一的 {@code ModuleInfo} 实例,贯穿整个语义分析流程。 + * + *

包含信息: *

+ * + *

典型用途: + *

*/ public class ModuleInfo { - /** 模块名称,作为全局唯一标识 */ + /** + * 模块名称,作为全局唯一标识 + */ private final String name; - /** 该模块显式导入的模块名集合(用于跨模块访问符号) */ + /** + * 该模块显式导入的模块名集合(用于跨模块访问符号) + */ private final Set imports = new HashSet<>(); - /** 该模块中定义的函数名 → 函数类型映射 */ + /** + * 该模块中定义的函数名 → 函数类型映射 + */ private final Map functions = new HashMap<>(); + /** + * 模块级全局符号表(常量 / 全局变量) + */ + private SymbolTable globals; + /** * 构造模块信息对象。 * @@ -49,7 +71,7 @@ public class ModuleInfo { /** * 获取该模块导入的模块名称集合。 *

- * 返回集合为内部数据的直接引用,调用方可通过 {@code add/remove} 方法动态维护导入信息。 + * 返回集合为内部数据的直接引用,调用方可通过 {@code add}/{@code remove} 方法动态维护导入信息。 * * @return 可变集合,包含所有导入模块名 */ @@ -69,4 +91,26 @@ public class ModuleInfo { return functions; } + /** + * 获取模块的全局符号表(包含常量与全局变量)。 + *

+ * 该符号表由语义分析的 FunctionChecker 阶段构建完成并注入。 + * 提供跨模块类型检查、常量折叠等能力。 + * + * @return 当前模块的全局符号表 + */ + public SymbolTable getGlobals() { + return globals; + } + + /** + * 设置模块的全局符号表。 + *

+ * 仅应由 FunctionChecker 在语义分析全局扫描阶段调用。 + * + * @param globals 全局符号表实例 + */ + public void setGlobals(SymbolTable globals) { + this.globals = globals; + } }