From f39aece9cf87482bdc3aaed0ac6db2550ce89426 Mon Sep 17 00:00:00 2001 From: Luke Date: Tue, 26 Aug 2025 14:32:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=88=90=E5=91=98=E8=AE=BF=E9=97=AE=E7=9A=84=E8=AF=AD=E4=B9=89?= =?UTF-8?q?=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现了跨模块常量和全局变量访问的语义分析- 能根据目标模块的全局符号表返回准确的类型信息- 完全支持跨模块类型推断 - 对非模块成员访问的情况增加了错误处理 --- .../expression/MemberExpressionAnalyzer.java | 59 ++++++++++++------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/expression/MemberExpressionAnalyzer.java b/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/expression/MemberExpressionAnalyzer.java index a115e61..5080545 100644 --- a/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/expression/MemberExpressionAnalyzer.java +++ b/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/expression/MemberExpressionAnalyzer.java @@ -8,35 +8,42 @@ import org.jcnc.snow.compiler.semantic.analyzers.base.ExpressionAnalyzer; import org.jcnc.snow.compiler.semantic.core.Context; import org.jcnc.snow.compiler.semantic.core.ModuleInfo; import org.jcnc.snow.compiler.semantic.error.SemanticError; +import org.jcnc.snow.compiler.semantic.symbol.Symbol; import org.jcnc.snow.compiler.semantic.symbol.SymbolTable; import org.jcnc.snow.compiler.semantic.type.BuiltinType; import org.jcnc.snow.compiler.semantic.type.Type; /** - * {@code MemberExpressionAnalyzer} – 成员访问表达式的语义分析器。 + * {@code MemberExpressionAnalyzer} 用于分析模块成员访问表达式的类型和语义。 * *

- * 当前实现仅支持 ModuleName.constOrVar 形式的跨模块常量 / - * 全局变量访问,不支持对象成员(如 a.b.c)。 + * 当前实现支持 ModuleName.constOrVar 形式的跨模块常量/全局变量访问, + * 能根据目标模块的全局符号表,返回准确的类型信息,完全支持跨模块类型推断。 + *
+ * 对于非模块成员的访问(如对象.属性、多级 a.b.c),暂不支持,遇到时将报告语义错误。 *

* + *

+ * 核心特性: *

+ *

*/ public class MemberExpressionAnalyzer implements ExpressionAnalyzer { /** - * 对成员访问表达式执行语义分析。 + * 语义分析模块成员访问表达式。 * - * @param ctx 全局语义上下文,包含模块表、错误收集等 - * @param mi 当前模块信息(含本模块名、已导入模块) - * @param fn 当前所在函数节点 - * @param locals 当前作用域符号表 - * @param expr 当前要分析的成员表达式(如 ModuleA.a) - * @return 分析推断得到的类型(目前恒定降级为 int),如有错误也会记录 + * @param ctx 全局语义分析上下文,持有所有模块及错误记录 + * @param mi 当前模块信息(用于判断导入关系) + * @param fn 当前函数节点 + * @param locals 当前局部符号表 + * @param expr 当前要分析的成员表达式(如 ModuleA.a) + * @return 成员表达式的类型;出错时类型降级为 int,并记录语义错误 */ @Override public Type analyze(Context ctx, @@ -47,29 +54,41 @@ public class MemberExpressionAnalyzer implements ExpressionAnalyzer