提取重复方法

This commit is contained in:
Luke 2025-04-25 17:10:32 +08:00
parent 7e3d7fc4d0
commit e3bc1a99e7

View File

@ -1,4 +1,6 @@
package org.jcnc.snow.compiler.parser.ast; package org.jcnc.snow.compiler.parser.util;
import org.jcnc.snow.compiler.parser.ast.*;
import java.util.List; import java.util.List;
@ -80,12 +82,7 @@ public class ASTJsonSerializer {
// body // body
sb.append("\"body\":["); sb.append("\"body\":[");
List<StatementNode> body = f.body(); List<StatementNode> body = f.body();
for (int i = 0; i < body.size(); i++) { return getString(sb, body);
sb.append(nodeToJson(body.get(i)));
if (i + 1 < body.size()) sb.append(",");
}
sb.append("]}");
return sb.toString();
} }
private static String declarationToJson(DeclarationNode d) { private static String declarationToJson(DeclarationNode d) {
@ -114,6 +111,10 @@ public class ASTJsonSerializer {
.append(exprToJson(i.condition())).append(","); .append(exprToJson(i.condition())).append(",");
sb.append("\"then\":["); sb.append("\"then\":[");
List<StatementNode> thenBranch = i.thenBranch(); List<StatementNode> thenBranch = i.thenBranch();
return getString(sb, thenBranch);
}
private static String getString(StringBuilder sb, List<StatementNode> thenBranch) {
for (int j = 0; j < thenBranch.size(); j++) { for (int j = 0; j < thenBranch.size(); j++) {
sb.append(nodeToJson(thenBranch.get(j))); sb.append(nodeToJson(thenBranch.get(j)));
if (j + 1 < thenBranch.size()) sb.append(","); if (j + 1 < thenBranch.size()) sb.append(",");
@ -130,12 +131,7 @@ public class ASTJsonSerializer {
.append("\"update\":").append(nodeToJson(l.update())).append(",") .append("\"update\":").append(nodeToJson(l.update())).append(",")
.append("\"body\":["); .append("\"body\":[");
List<StatementNode> body = l.body(); List<StatementNode> body = l.body();
for (int i = 0; i < body.size(); i++) { return getString(sb, body);
sb.append(nodeToJson(body.get(i)));
if (i + 1 < body.size()) sb.append(",");
}
sb.append("]}");
return sb.toString();
} }
private static String returnToJson(ReturnNode r) { private static String returnToJson(ReturnNode r) {