From d25829760949e585a3785a41c359c55067be9178 Mon Sep 17 00:00:00 2001 From: Luke Date: Mon, 1 Sep 2025 09:23:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E4=BD=93=E7=BB=A7=E6=89=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加对结构体继承的支持,允许使用 "extends" 关键字定义父结构体 - 修改 StructNode 构造函数以支持父结构体名称参数 - 优化结构体解析逻辑,处理可选的继承语句 --- .../jcnc/snow/compiler/parser/struct/StructParser.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jcnc/snow/compiler/parser/struct/StructParser.java b/src/main/java/org/jcnc/snow/compiler/parser/struct/StructParser.java index b035c1b..da74137 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/struct/StructParser.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/struct/StructParser.java @@ -53,6 +53,14 @@ public class StructParser implements TopLevelParser { ts.expect("struct"); ts.expect(":"); String structName = ts.expectType(TokenType.IDENTIFIER).getLexeme(); + + // 解析可选 extends + String parentName = null; + if ("extends".equals(ts.peek().getLexeme())) { + ts.expect("extends"); + parentName = ts.expectType(TokenType.IDENTIFIER).getLexeme(); + } + ts.expectType(TokenType.NEWLINE); /* -------- 初始化容器 -------- */ @@ -112,7 +120,7 @@ public class StructParser implements TopLevelParser { ts.expect("end"); ts.expect("struct"); // 返回完整结构体 AST 节点 - return new StructNode(structName, fields, init, methods, + return new StructNode(structName, parentName, fields, init, methods, new NodeContext(line, col, file)); }