feat: 实现 BuiltinUtils 标准库并更新相关机制
- 重构 BuiltinTypeRegistry 类,扩展内置类型和模块的注册功能 - 新增 BuiltinUtils 标准库模块,提供 print 和 println 函数 - 实现 syscall 内核函数,供 BuiltinUtils 内部使用 - 更新测试用例,添加 Demo14 项目以验证新功能
This commit is contained in:
parent
4e3de185b8
commit
64cefebee5
@ -3,7 +3,6 @@
|
|||||||
<toRun name="Demo1" type="Application" />
|
<toRun name="Demo1" type="Application" />
|
||||||
<toRun name="Demo10" type="Application" />
|
<toRun name="Demo10" type="Application" />
|
||||||
<toRun name="Demo11" type="Application" />
|
<toRun name="Demo11" type="Application" />
|
||||||
<toRun name="Demo11" type="Application" />
|
|
||||||
<toRun name="Demo12" type="Application" />
|
<toRun name="Demo12" type="Application" />
|
||||||
<toRun name="Demo13" type="Application" />
|
<toRun name="Demo13" type="Application" />
|
||||||
<toRun name="Demo2" type="Application" />
|
<toRun name="Demo2" type="Application" />
|
||||||
|
|||||||
19
playground/Demo/Demo14/BuiltinUtils.snow
Normal file
19
playground/Demo/Demo14/BuiltinUtils.snow
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
module: BuiltinUtils
|
||||||
|
function: print
|
||||||
|
parameter:
|
||||||
|
declare msg: int
|
||||||
|
return_type: void
|
||||||
|
body:
|
||||||
|
syscall("PRINT",1)
|
||||||
|
end body
|
||||||
|
end function
|
||||||
|
|
||||||
|
function: println
|
||||||
|
parameter:
|
||||||
|
declare msg: int
|
||||||
|
return_type: void
|
||||||
|
body:
|
||||||
|
syscall("PRINTLN",1)
|
||||||
|
end body
|
||||||
|
end function
|
||||||
|
end module
|
||||||
11
playground/Demo/Demo14/Main.snow
Normal file
11
playground/Demo/Demo14/Main.snow
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
module: Main
|
||||||
|
import: BuiltinUtils
|
||||||
|
|
||||||
|
function: main
|
||||||
|
return_type: void
|
||||||
|
body:
|
||||||
|
BuiltinUtils.print(1)
|
||||||
|
BuiltinUtils.println(2)
|
||||||
|
end body
|
||||||
|
end function
|
||||||
|
end module
|
||||||
@ -1,54 +1,74 @@
|
|||||||
package org.jcnc.snow.compiler.semantic.core;
|
package org.jcnc.snow.compiler.semantic.core;
|
||||||
|
|
||||||
import org.jcnc.snow.compiler.semantic.type.*;
|
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
|
||||||
|
import org.jcnc.snow.compiler.semantic.type.FunctionType;
|
||||||
|
import org.jcnc.snow.compiler.semantic.type.Type;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@code BuiltinTypeRegistry} 是内置类型和内置模块的集中注册中心。
|
* 语言全部内置类型 / 模块 / 函数的注册中心。
|
||||||
* <p>
|
*
|
||||||
* 本类主要负责:
|
* <p>目前同时注册:</p>
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>定义语言中所有可识别的基础类型(如 int、float、string 等);</li>
|
* <li>所有基础类型(byte、short、int …)</li>
|
||||||
* <li>在语义分析初始化时,将内置模块(如 {@code BuiltinUtils})注册到上下文中;</li>
|
* <li>标准库模块 <b>BuiltinUtils</b> —— 仅声明函数签名,真正实现写在 Snow 源码中</li>
|
||||||
* <li>提供对内置类型的快速查找支持。</li>
|
* <li>运行时内核函数 <b>syscall</b> —— 供标准库内部实现调用</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
* 该类为纯工具类,所有成员均为静态,不可实例化。
|
|
||||||
*/
|
*/
|
||||||
public final class BuiltinTypeRegistry {
|
public final class BuiltinTypeRegistry {
|
||||||
|
|
||||||
/**
|
/** 基础类型表:名称 → Type */
|
||||||
* 内置类型映射表: 将类型名称字符串映射到对应的 {@link Type} 实例。
|
public static final Map<String, Type> BUILTIN_TYPES;
|
||||||
* <p>
|
static {
|
||||||
* 用于类型解析过程(如解析变量声明或函数返回类型)中,
|
Map<String, Type> t = new HashMap<>();
|
||||||
* 将用户源码中的类型字符串转换为语义类型对象。
|
t.put("byte", BuiltinType.BYTE);
|
||||||
*/
|
t.put("short", BuiltinType.SHORT);
|
||||||
public static final Map<String, Type> BUILTIN_TYPES = Map.of(
|
t.put("int", BuiltinType.INT);
|
||||||
"int", BuiltinType.INT,
|
t.put("long", BuiltinType.LONG);
|
||||||
"long", BuiltinType.LONG,
|
t.put("float", BuiltinType.FLOAT);
|
||||||
"short", BuiltinType.SHORT,
|
t.put("double", BuiltinType.DOUBLE);
|
||||||
"byte", BuiltinType.BYTE,
|
t.put("string", BuiltinType.STRING);
|
||||||
"float", BuiltinType.FLOAT,
|
t.put("void", BuiltinType.VOID);
|
||||||
"double", BuiltinType.DOUBLE,
|
BUILTIN_TYPES = Collections.unmodifiableMap(t);
|
||||||
"string", BuiltinType.STRING,
|
}
|
||||||
"boolean", BuiltinType.BOOLEAN,
|
|
||||||
"void", BuiltinType.VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 私有构造函数,禁止实例化。
|
|
||||||
*/
|
|
||||||
private BuiltinTypeRegistry() { }
|
private BuiltinTypeRegistry() { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化语义上下文中与内置模块相关的内容。
|
* 供语义分析阶段调用:向上下文注入所有内置模块 / 函数声明。
|
||||||
* <p>
|
|
||||||
* 当前实现将内置模块 {@code BuiltinUtils} 注册至上下文模块表中,
|
|
||||||
* 使其在用户代码中可被访问(如 {@code BuiltinUtils.to_string(...)})。
|
|
||||||
*
|
|
||||||
* @param ctx 当前语义分析上下文
|
|
||||||
*/
|
*/
|
||||||
public static void init(Context ctx) {
|
public static void init(Context ctx) {
|
||||||
|
/* ---------- BuiltinUtils ---------- */
|
||||||
|
ModuleInfo utils = new ModuleInfo("BuiltinUtils");
|
||||||
|
|
||||||
|
// print(string): void
|
||||||
|
utils.getFunctions().put(
|
||||||
|
"print",
|
||||||
|
new FunctionType(
|
||||||
|
Collections.singletonList(BuiltinType.STRING),
|
||||||
|
BuiltinType.VOID
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// println(string): void
|
||||||
|
utils.getFunctions().put(
|
||||||
|
"println",
|
||||||
|
new FunctionType(
|
||||||
|
Collections.singletonList(BuiltinType.STRING),
|
||||||
|
BuiltinType.VOID
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// syscall(string, string): void —— 供 BuiltinUtils 内部使用
|
||||||
|
utils.getFunctions().put(
|
||||||
|
"syscall",
|
||||||
|
new FunctionType(
|
||||||
|
Arrays.asList(BuiltinType.STRING, BuiltinType.STRING),
|
||||||
|
BuiltinType.VOID
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
ctx.getModules().putIfAbsent("BuiltinUtils", utils);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user