diff --git a/src/main/java/org/jcnc/snow/compiler/parser/utils/ASTJsonSerializer.java b/src/main/java/org/jcnc/snow/compiler/parser/utils/ASTJsonSerializer.java index 87dc160..775d492 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/utils/ASTJsonSerializer.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/utils/ASTJsonSerializer.java @@ -13,7 +13,7 @@ import java.util.*; * 并可借助 {@code JSONParser.toJson(Object)} 方法将其序列化为 JSON 字符串,用于调试、 * 可视化或跨语言数据传输。 *

- * 支持的节点类型包括: + * 支持的节点类型包括(新增对 {@code BoolLiteralNode}、{@code UnaryExpressionNode} 的完整支持): *

*/ public class ASTJsonSerializer { @@ -174,19 +176,32 @@ public class ASTJsonSerializer { */ private static Object exprToMap(ExpressionNode expr) { return switch (expr) { + // 二元表达式 case BinaryExpressionNode(ExpressionNode left, String operator, ExpressionNode right) -> exprMap("BinaryExpression", "left", exprToMap(left), "operator", operator, "right", exprToMap(right) ); + // 一元表达式 + case UnaryExpressionNode(String operator, ExpressionNode operand) -> exprMap("UnaryExpression", + "operator", operator, + "operand", exprToMap(operand) + ); + // 布尔字面量 + case BoolLiteralNode(boolean value) -> exprMap("BoolLiteral", "value", value); + // 标识符 case IdentifierNode(String name) -> exprMap("Identifier", "name", name); + // 数字字面量 case NumberLiteralNode(String value) -> exprMap("NumberLiteral", "value", value); + // 字符串字面量 case StringLiteralNode(String value) -> exprMap("StringLiteral", "value", value); + // 调用表达式 case CallExpressionNode(ExpressionNode callee, List arguments, int line, int column, String file) -> { List args = new ArrayList<>(arguments.size()); for (ExpressionNode arg : arguments) args.add(exprToMap(arg)); yield exprMap("CallExpression", "callee", exprToMap(callee), "arguments", args); } + // 成员访问表达式 case MemberExpressionNode(ExpressionNode object, String member) -> exprMap("MemberExpression", "object", exprToMap(object), "member", member @@ -195,4 +210,4 @@ public class ASTJsonSerializer { default -> Map.of("type", expr.getClass().getSimpleName()); }; } -} \ No newline at end of file +}