diff --git a/src/main/java/org/jcnc/snow/compiler/semantic/BuiltinType.java b/src/main/java/org/jcnc/snow/compiler/semantic/BuiltinType.java index 50dee7f..e3b9fbd 100644 --- a/src/main/java/org/jcnc/snow/compiler/semantic/BuiltinType.java +++ b/src/main/java/org/jcnc/snow/compiler/semantic/BuiltinType.java @@ -1,18 +1,54 @@ package org.jcnc.snow.compiler.semantic; /** - * 内置基础类型枚举:int, string, void。 - * 其中 int 也可用于表示真假值。 + * 内置基础类型枚举。 + *
+ * 本枚举定义了编译器中最基本的三种内置类型: + *
+ * 实现了 Type 接口,提供了基本的类型兼容性判断和字符串表示方法。 */ public enum BuiltinType implements Type { - INT, STRING, VOID; + /** + * 整数类型,也可用于布尔值。 + */ + INT, + /** + * 字符串类型。 + */ + STRING, + + /** + * 空类型,用于表示无返回值的情况。 + */ + VOID; + + /** + * 判断当前类型是否与另一个类型兼容。 + *
+ * 兼容的条件是两个类型必须完全相同(引用相等)。 + * + * @param other 另一个需要检查兼容性的类型 + * @return 如果类型完全相同则返回 true,否则返回 false + */ @Override public boolean isCompatible(Type other) { - // 完全相同类型才兼容 + // 只有当两个类型对象是同一个实例时才认为兼容 return this == other; } + /** + * 将类型转换为小写字符串形式。 + *
+ * 例如:INT 会转换为 "int"。 + * + * @return 当前类型的小写字符串表示 + */ @Override public String toString() { return name().toLowerCase(); diff --git a/src/main/java/org/jcnc/snow/compiler/semantic/FunctionType.java b/src/main/java/org/jcnc/snow/compiler/semantic/FunctionType.java index 70be709..01ce22b 100644 --- a/src/main/java/org/jcnc/snow/compiler/semantic/FunctionType.java +++ b/src/main/java/org/jcnc/snow/compiler/semantic/FunctionType.java @@ -1,16 +1,45 @@ package org.jcnc.snow.compiler.semantic; import java.util.List; +import java.util.Objects; /** - * 表示函数类型,包含参数类型列表和返回类型。 + * 表示函数类型。 + *
+ * 一个函数类型由参数类型列表和返回类型共同确定。 + * 例如:一个接受两个 int 参数并返回 string 的函数,其类型描述为 (int, int) -> string。 + *
+ * 本类是一个 Java record,自动生成基本的构造方法、访问器、equals 和 hashCode 方法,
+ * 并实现了 {@link Type} 接口,支持类型兼容性检查和字符串表示。
*/
public record FunctionType(List
+ * {@link java.util.Collections#unmodifiableList(List)} 包装成不可变列表,
+ * 保证函数类型对象本身的安全性和不可变性。
+ *
+ * @param paramTypes 参数类型列表
+ * @param returnType 返回类型
+ */
public FunctionType(List
+ * 兼容条件为:
+ *
+ * 格式为:"(参数类型列表) -> 返回类型",例如:
+ * 相等条件为:
+ *
+ * 计算规则是基于参数类型列表和返回类型,保证与 {@link #equals(Object)} 方法一致。
+ *
+ * @return 函数类型的哈希值
+ */
+ @Override
+ public int hashCode() {
+ return Objects.hash(paramTypes, returnType);
+ }
}
diff --git a/src/main/java/org/jcnc/snow/compiler/semantic/ModuleInfo.java b/src/main/java/org/jcnc/snow/compiler/semantic/ModuleInfo.java
index 0fe4c8e..33c77cc 100644
--- a/src/main/java/org/jcnc/snow/compiler/semantic/ModuleInfo.java
+++ b/src/main/java/org/jcnc/snow/compiler/semantic/ModuleInfo.java
@@ -6,19 +6,38 @@ import java.util.Map;
import java.util.Set;
/**
- * 保存模块级别信息,包括模块名、导入列表和函数签名。
+ * 保存模块级别的信息。
+ *
+ * 模块信息包括:
+ *
+ * 主要用于语义分析阶段,帮助管理模块之间的依赖关系和函数声明信息。
*/
public class ModuleInfo {
+ /** 模块名称 */
private final String name;
+ /** 导入的模块名称集合 */
private final Set
+ * 返回的是内部集合的直接引用,可以通过它进行增删操作。
+ *
+ * @return 导入模块名称的集合
*/
public Set
+ * 返回的是函数名到函数类型 {@link FunctionType} 的映射表。
+ * 返回的是内部映射的直接引用,可以通过它进行增删操作。
+ *
+ * @return 函数映射表
*/
public Map
+ *
+ *
+ * @param other 需要检查兼容性的另一个类型
+ * @return 如果兼容返回 true,否则返回 false
+ */
@Override
public boolean isCompatible(Type other) {
if (!(other instanceof FunctionType)) return false;
@@ -19,11 +48,30 @@ public record FunctionType(List(int, string) -> void。
+ *
+ * @return 函数类型的字符串表示
+ */
@Override
public String toString() {
return "(" + paramTypes + ") -> " + returnType;
}
+ /**
+ * 判断当前函数类型是否与另一个对象相等。
+ *
+ *
+ *
+ * @param obj 另一个对象
+ * @return 如果相等返回 true,否则返回 false
+ */
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
@@ -33,4 +81,15 @@ public record FunctionType(List
+ *
+ *