refactor: 重构 ModuleNode 类并增强其文档注释

- 重新组织类的结构,使其更加清晰和易于理解- 增加了对模块节点包含内容的详细注释,包括全局变量、结构体和函数定义
- 优化了 toString 方法的实现,提高了代码可读性
- 补充了对结构体定义列表的处理
This commit is contained in:
Luke 2025-08-29 18:03:11 +08:00
parent 49cb89c9f2
commit fea8e14245

View File

@ -7,44 +7,62 @@ import java.util.List;
import java.util.StringJoiner;
/**
* 表示模块定义的 AST 节点
* 一个模块通常由模块名导入语句列表和函数定义列表组成
* {@code ModuleNode}
* <p>
* 抽象语法树AST顶层节点 模块定义
* <ul>
* <li>代表一个完整的源码模块/文件 main, math </li>
* <li>包含模块名导入列表全局变量结构体和函数定义等全部模块级内容</li>
* <li>是整个编译流程的入口节点</li>
* </ul>
* </p>
*
* @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<ImportNode> imports,
List<DeclarationNode> globals,
List<StructNode> structs,
List<FunctionNode> 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 + "])";
}
}