refactor: 重构 BuiltinTypeRegistry 类并优化文档注释

- 重新整理基础类型表,添加 boolean 类型
- 优化文档注释,增加类和方法的详细描述
- 改进代码结构,提高可读性和可维护性
This commit is contained in:
Luke 2025-07-21 16:51:30 +08:00
parent 2cb428ed9b
commit fec9fe3527

View File

@ -7,42 +7,62 @@ import org.jcnc.snow.compiler.semantic.type.Type;
import java.util.*;
/**
* 语言全部内置类型 / 模块 / 函数的注册中心
* <b>BuiltinTypeRegistry - 语言全部内置类型/模块/函数注册中心</b>
*
* <p>目前同时注册</p>
* <p>
* 该类统一注册编译器需要用到的所有基础类型标准库模块与内核函数供语义分析及类型检查阶段使用
* <ul>
* <li>所有基础类型byteshortint </li>
* <li>标准库模块 <b>BuiltinUtils</b> 仅声明函数签名真正实现写在 Snow 源码中</li>
* <li>运行时内核函数 <b>syscall</b> 供标准库内部实现调用</li>
* <li>所有基础类型byteshortintlongfloatdoublestringbooleanvoid</li>
* <li>标准库模块 <b>BuiltinUtils</b>仅注册函数签名具体实现由 Snow 语言源码实现</li>
* <li>内核函数 <b>syscall</b>供标准库内部实现调用</li>
* </ul>
* </p>
*/
public final class BuiltinTypeRegistry {
/** 基础类型表:名称 → Type */
/**
* <b>基础类型表</b>类型名称 Type 实例
* <p>
* Map 静态初始化注册所有 Snow 语言基础类型供类型检查与类型推断使用
* </p>
*/
public static final Map<String, Type> BUILTIN_TYPES;
static {
Map<String, Type> t = new HashMap<>();
t.put("byte", BuiltinType.BYTE);
t.put("short", BuiltinType.SHORT);
t.put("int", BuiltinType.INT);
t.put("long", BuiltinType.LONG);
t.put("float", BuiltinType.FLOAT);
t.put("double", BuiltinType.DOUBLE);
t.put("string", BuiltinType.STRING);
t.put("void", BuiltinType.VOID);
BUILTIN_TYPES = Collections.unmodifiableMap(t);
t.put("byte", BuiltinType.BYTE); // 字节型
t.put("short", BuiltinType.SHORT); // 短整型
t.put("int", BuiltinType.INT); // 整型
t.put("long", BuiltinType.LONG); // 长整型
t.put("float", BuiltinType.FLOAT); // 单精度浮点
t.put("double", BuiltinType.DOUBLE); // 双精度浮点
t.put("string", BuiltinType.STRING); // 字符串
t.put("void", BuiltinType.VOID); // 无返回
t.put("boolean", BuiltinType.BOOLEAN); // 布尔类型
BUILTIN_TYPES = Collections.unmodifiableMap(t); // 不可变映射防止被意外更改
}
/**
* 私有构造方法禁止实例化
*/
private BuiltinTypeRegistry() { }
/**
* 供语义分析阶段调用向上下文注入所有内置模块 / 函数声明
* <b>初始化内置模块和函数声明</b>
*
* <p>
* 语义分析阶段调用将所有基础模块与函数声明注册到语义上下文中
* - 目前注册 BuiltinUtils 标准库模块仅注册签名不负责具体实现
* - syscall 函数注册到 BuiltinUtils 供标准库内部调用
* </p>
*
* @param ctx 全局语义分析上下文持有模块表
*/
public static void init(Context ctx) {
/* ---------- BuiltinUtils ---------- */
ModuleInfo utils = new ModuleInfo("BuiltinUtils");
/* ---------- 注册标准库 os ---------- */
ModuleInfo utils = new ModuleInfo("os");
// syscall(string, int): void BuiltinUtils 内部使用
// syscall(string, int): void 标准库内部使用的调用接口
utils.getFunctions().put(
"syscall",
new FunctionType(
@ -51,6 +71,7 @@ public final class BuiltinTypeRegistry {
)
);
ctx.getModules().putIfAbsent("BuiltinUtils", utils);
// 注册 BuiltinUtils 到上下文的模块表若已存在则不重复添加
ctx.getModules().putIfAbsent("os", utils);
}
}