From 49b5e61e8e4e8873ddbbdcb2ff8bab051bf19924 Mon Sep 17 00:00:00 2001 From: Luke Date: Wed, 27 Aug 2025 10:43:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E5=AD=97=E9=9D=A2=E9=87=8F=E7=9A=84=E8=BD=AC=E4=B9=89?= =?UTF-8?q?=E7=AC=A6=E5=92=8C=20Unicode=20=E8=BD=AC=E4=B9=89=E8=A7=A3?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 StringEscape 工具类用于字符串转义 - 在解析字符串字面量时,去除首尾引号 - 对字符串内部内容进行转义符和 Unicode 转义解析 --- .../parser/expression/StringLiteralParselet.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/StringLiteralParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/StringLiteralParselet.java index 542a097..b4d417c 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/StringLiteralParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/StringLiteralParselet.java @@ -1,5 +1,6 @@ package org.jcnc.snow.compiler.parser.expression; +import org.jcnc.snow.common.StringEscape; import org.jcnc.snow.compiler.lexer.token.Token; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.ast.StringLiteralNode; @@ -26,8 +27,14 @@ public class StringLiteralParselet implements PrefixParselet { */ @Override public ExpressionNode parse(ParserContext ctx, Token token) { + // 去除首尾引号 String raw = token.getRaw(); - String content = raw.substring(1, raw.length() - 1); - return new StringLiteralNode(content, new NodeContext(token.getLine(), token.getCol(), ctx.getSourceName())); + String inner = raw.substring(1, raw.length() - 1); + // 解析转义符与 Unicode 转义 + String value = StringEscape.unescape(inner); + return new StringLiteralNode( + value, + new NodeContext(token.getLine(), token.getCol(), ctx.getSourceName()) + ); } } \ No newline at end of file