diff --git a/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/statement/LoopAnalyzer.java b/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/statement/LoopAnalyzer.java index a00d993..064d059 100644 --- a/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/statement/LoopAnalyzer.java +++ b/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/statement/LoopAnalyzer.java @@ -44,24 +44,24 @@ public class LoopAnalyzer implements StatementAnalyzer { // 新建 loopScope,以支持循环内部变量声明与外部隔离 SymbolTable loopScope = new SymbolTable(locals); - // 2. 分析初始化语句(如 for(i=0)),使用 loopScope 作为作用域 - var initAnalyzer = ctx.getRegistry().getStatementAnalyzer(ln.initializer()); + // 2. 分析初始化语句 + var initAnalyzer = ctx.getRegistry().getStatementAnalyzer(ln.init()); if (initAnalyzer != null) { - initAnalyzer.analyze(ctx, mi, fn, loopScope, ln.initializer()); + initAnalyzer.analyze(ctx, mi, fn, loopScope, ln.init()); } - // 3. 分析条件表达式(如 for(...; cond; ...) 或 while(cond)) - var condAnalyzer = ctx.getRegistry().getExpressionAnalyzer(ln.condition()); - Type condType = condAnalyzer.analyze(ctx, mi, fn, loopScope, ln.condition()); + // 3. 分析条件表达式 + var condAnalyzer = ctx.getRegistry().getExpressionAnalyzer(ln.cond()); + Type condType = condAnalyzer.analyze(ctx, mi, fn, loopScope, ln.cond()); // 条件类型必须为 boolean,否则记录错误 if (TypeUtils.isLogic(condType)) { ctx.getErrors().add(new SemanticError(ln, "loop 条件必须为 boolean")); } - // 4. 分析更新语句(如 for(...; ...; update)) - var updateAnalyzer = ctx.getRegistry().getStatementAnalyzer(ln.update()); + // 4. 分析更新语句 + var updateAnalyzer = ctx.getRegistry().getStatementAnalyzer(ln.step()); if (updateAnalyzer != null) { - updateAnalyzer.analyze(ctx, mi, fn, loopScope, ln.update()); + updateAnalyzer.analyze(ctx, mi, fn, loopScope, ln.step()); } // 5. 分析循环体内的每一条语句