From fea8e142453277e19327eb699d11dda9b310b2e0 Mon Sep 17 00:00:00 2001
From: Luke
Date: Fri, 29 Aug 2025 18:03:11 +0800
Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=20ModuleNode=20?=
=?UTF-8?q?=E7=B1=BB=E5=B9=B6=E5=A2=9E=E5=BC=BA=E5=85=B6=E6=96=87=E6=A1=A3?=
=?UTF-8?q?=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 重新组织类的结构,使其更加清晰和易于理解- 增加了对模块节点包含内容的详细注释,包括全局变量、结构体和函数定义
- 优化了 toString 方法的实现,提高了代码可读性
- 补充了对结构体定义列表的处理
---
.../snow/compiler/parser/ast/ModuleNode.java | 66 ++++++++++++-------
1 file changed, 42 insertions(+), 24 deletions(-)
diff --git a/src/main/java/org/jcnc/snow/compiler/parser/ast/ModuleNode.java b/src/main/java/org/jcnc/snow/compiler/parser/ast/ModuleNode.java
index 2a1b371..836c547 100644
--- a/src/main/java/org/jcnc/snow/compiler/parser/ast/ModuleNode.java
+++ b/src/main/java/org/jcnc/snow/compiler/parser/ast/ModuleNode.java
@@ -7,44 +7,62 @@ import java.util.List;
import java.util.StringJoiner;
/**
- * 表示模块定义的 AST 节点。
- * 一个模块通常由模块名、导入语句列表和函数定义列表组成。
+ * {@code ModuleNode}
+ *
+ * 抽象语法树(AST)顶层节点 —— 模块定义。
+ *
+ * - 代表一个完整的源码模块/文件(如 main, math 等)。
+ * - 包含模块名、导入列表、全局变量、结构体和函数定义等全部模块级内容。
+ * - 是整个编译流程的入口节点。
+ *
+ *
*
- * @param name 模块名称。
- * @param imports 模块导入列表,每个导入是一个 {@link ImportNode}。
- * @param functions 模块中的函数列表,每个函数是一个 {@link FunctionNode}。
- * @param context 节点上下文信息(包含行号、列号等)
+ * @param name 模块名称
+ * @param imports 导入模块列表
+ * @param globals 全局变量/常量声明
+ * @param structs 结构体定义列表
+ * @param functions 函数定义列表
+ * @param context 源代码位置信息
*/
public record ModuleNode(
String name,
List imports,
List globals,
+ List structs,
List functions,
NodeContext context
) implements Node {
/**
- * 返回模块节点的字符串表示形式,包含模块名、导入模块列表和函数列表。
+ * 返回模块节点的简要字符串表示(用于日志、调试)。
+ * 列出模块名、导入、全局变量、结构体、函数等简明内容。
*
- * @return 模块的简洁字符串表示,用于调试和日志输出。
+ * @return 字符串形式,如
+ * Module(name=main, imports=[math], globals=[int x], structs=[Foo], functions=[bar])
*/
@Override
public String toString() {
- StringJoiner importJoiner = new StringJoiner(", ");
- for (ImportNode imp : imports) {
- importJoiner.add(imp.moduleName());
- }
- StringJoiner globalJoiner = new StringJoiner(", ");
- for (DeclarationNode g : globals) {
- globalJoiner.add(g.getType() + " " + g.getName());
- }
- StringJoiner funcJoiner = new StringJoiner(", ");
- for (FunctionNode fn : functions) {
- funcJoiner.add(fn.name());
- }
- return "Module(name=" + name
- + ", imports=[" + importJoiner + "]"
- + ", globals=[" + globalJoiner + "]"
- + ", functions=[" + funcJoiner + "])";
+ // 1) 导入模块列表字符串
+ StringJoiner impJ = new StringJoiner(", ");
+ imports.forEach(i -> impJ.add(i.moduleName()));
+
+ // 2) 全局变量/常量列表字符串
+ StringJoiner globJ = new StringJoiner(", ");
+ globals.forEach(g -> globJ.add(g.getType() + " " + g.getName()));
+
+ // 3) 结构体名列表字符串
+ StringJoiner structJ = new StringJoiner(", ");
+ structs.forEach(s -> structJ.add(s.name()));
+
+ // 4) 函数名列表字符串
+ StringJoiner funcJ = new StringJoiner(", ");
+ functions.forEach(f -> funcJ.add(f.name()));
+
+ // 5) 综合输出
+ return "Module(name=" + name +
+ ", imports=[" + impJ + "]" +
+ ", globals=[" + globJ + "]" +
+ ", structs=[" + structJ + "]" +
+ ", functions=[" + funcJ + "])";
}
}