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 5080545..4285893 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 @@ -11,39 +11,49 @@ 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.FunctionType; +import org.jcnc.snow.compiler.semantic.type.StructType; import org.jcnc.snow.compiler.semantic.type.Type; /** - * {@code MemberExpressionAnalyzer} 用于分析模块成员访问表达式的类型和语义。 + * {@code MemberExpressionAnalyzer} * *

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

* *

- * 核心特性: - *

+ * 支持三类成员访问方式: *

+ *
    + *
  1. 当前实例字段语法糖:如 this.x,等价于访问当前作用域下名为 x 的变量或字段。
  2. + *
  3. 跨模块成员访问:如 ModuleName.member,常用于引用其他模块的全局变量、常量、函数等。
  4. + *
  5. 结构体实例成员/方法访问:如 a.ba.method,a 为结构体变量,b 为字段或方法。
  6. + *
*/ public class MemberExpressionAnalyzer implements ExpressionAnalyzer { /** - * 语义分析模块成员访问表达式。 + * 分析成员表达式,并返回其类型(如字段类型、方法类型等)。 * - * @param ctx 全局语义分析上下文,持有所有模块及错误记录 - * @param mi 当前模块信息(用于判断导入关系) + * @param ctx 全局语义分析上下文 + * @param mi 当前模块信息 * @param fn 当前函数节点 - * @param locals 当前局部符号表 - * @param expr 当前要分析的成员表达式(如 ModuleA.a) - * @return 成员表达式的类型;出错时类型降级为 int,并记录语义错误 + * @param locals 局部符号表(当前作用域的变量、形参等) + * @param expr 当前成员访问表达式(形如 obj.member) + * @return 该表达式的推断类型,如失败则返回 {@link BuiltinType#INT} + * + *

+ * 主要处理流程分为四大分支: + *

    + *
  1. this.x 语法糖(字段或变量访问)
  2. + *
  3. ModuleName.member 跨模块成员访问
  4. + *
  5. 结构体实例的成员/方法访问
  6. + *
  7. 其它对象成员(不支持)
  8. + *
+ * 出错时会注册语义错误,返回 int 作为降级类型。 + *

*/ @Override public Type analyze(Context ctx, @@ -54,41 +64,117 @@ public class MemberExpressionAnalyzer implements ExpressionAnalyzer