From 6428ba5cbdc19a197baeb03c2383d298c93988cf Mon Sep 17 00:00:00 2001 From: Luke Date: Mon, 1 Sep 2025 15:50:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=BC=BA=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E4=BD=93=E6=89=93=E5=8D=B0=E7=BB=86=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加结构体继承关系打印 - 优化字段、构造函数和方法的打印顺序 - 改进打印格式,提高可读性 --- .../compiler/parser/function/ASTPrinter.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jcnc/snow/compiler/parser/function/ASTPrinter.java b/src/main/java/org/jcnc/snow/compiler/parser/function/ASTPrinter.java index f448854..0192389 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/function/ASTPrinter.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/function/ASTPrinter.java @@ -62,16 +62,36 @@ public class ASTPrinter { for (ImportNode imp : m.imports()) { System.out.println(pad + " import " + imp.moduleName()); } + for (StructNode s : m.structs()) { + print(s, indent + 1); + } for (FunctionNode fn : m.functions()) { print(fn, indent + 1); } } case StructNode s -> { - System.out.println(pad + "struct " + s.name()); - s.fields().forEach(f -> print(f, indent + 1)); - if (s.init() != null) print(s.init(), indent + 1); - s.methods().forEach(m -> print(m, indent + 1)); + System.out.print(pad + "struct " + s.name()); + if (s.parent() != null && !s.parent().isEmpty()) { + System.out.print(" extends " + s.parent()); + } + System.out.println(); + for (DeclarationNode f : s.fields()) { + print(f, indent + 1); + } + // 打印所有构造函数 inits + if (s.inits() != null && !s.inits().isEmpty()) { + for (FunctionNode ctor : s.inits()) { + System.out.println(pad + " [init]"); + print(ctor, indent + 2); + } + } + // 打印所有方法 + if (s.methods() != null && !s.methods().isEmpty()) { + for (FunctionNode m : s.methods()) { + print(m, indent + 1); + } + } } case FunctionNode(