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)顶层节点 —— 模块定义。 + *

+ *

* - * @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 + "])"; } }