From 893354a8d7b1db13a83bf23762c0767ea8b3df1d Mon Sep 17 00:00:00 2001 From: woodzn Date: Sun, 2 Mar 2025 14:35:25 +0800 Subject: [PATCH 1/2] Update PX_Lexer.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加转义字符解析 --- kernel/PX_Lexer.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/kernel/PX_Lexer.c b/kernel/PX_Lexer.c index 3fca8632..7f328113 100644 --- a/kernel/PX_Lexer.c +++ b/kernel/PX_Lexer.c @@ -487,6 +487,11 @@ px_bool PX_LexerSortTextMap(px_lexer *lexer,const px_char *SourceText,px_bool ma currentDstSourceLine++; } /////////////////////////////////////////// + if (lexer->Sources[w_Offset]=='\\') { + w_Offset++; + r_Offset++; + lexer->Sources[w_Offset] = (SourceText[r_Offset]); + } w_Offset++; r_Offset++; } @@ -671,8 +676,22 @@ PX_LEXER_LEXEME_TYPE PX_LexerGetNextLexeme(px_lexer *lexer) PX_StringCatChar(&lexer->CurLexeme, lexer->Sources[lexer->SourceOffset++]); PX_StringCatChar(&lexer->CurLexeme, lexer->Sources[lexer->SourceOffset++]); } - else - PX_StringCatChar(&lexer->CurLexeme, lexer->Sources[lexer->SourceOffset++]); + else { + if (lexer->Sources[lexer->SourceOffset]=='\\') { + switch (lexer->Sources[lexer->SourceOffset+1]) { + case '"': PX_StringCatChar(&lexer->CurLexeme,'\"'); lexer->Sources++;lexer->Sources++;break; + case '\'': PX_StringCatChar(&lexer->CurLexeme,'\'');lexer->Sources++;lexer->Sources++;break; + case '\\': PX_StringCatChar(&lexer->CurLexeme,'\\');lexer->Sources++;lexer->Sources++;break; + case 'n': PX_StringCatChar(&lexer->CurLexeme,'\n'); lexer->Sources++;lexer->Sources++;break; + case 'r': PX_StringCatChar(&lexer->CurLexeme,'\r'); lexer->Sources++;lexer->Sources++;break; + case 't': PX_StringCatChar(&lexer->CurLexeme,'\t'); lexer->Sources++;lexer->Sources++;break; + case 'b': PX_StringCatChar(&lexer->CurLexeme,'\b'); lexer->Sources++;lexer->Sources++;break; + } + // } + }else { + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + } + } } PX_StringCat(&lexer->CurLexeme, chred); lexer->SourceOffset += PX_strlen(chred); From 4856ac6b866ba3c9f89b0ee1fe8133c88eecbbb5 Mon Sep 17 00:00:00 2001 From: woodzn Date: Sun, 2 Mar 2025 14:50:07 +0800 Subject: [PATCH 2/2] Update PX_Lexer.c --- kernel/PX_Lexer.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/PX_Lexer.c b/kernel/PX_Lexer.c index 7f328113..4d6d3303 100644 --- a/kernel/PX_Lexer.c +++ b/kernel/PX_Lexer.c @@ -686,6 +686,9 @@ PX_LEXER_LEXEME_TYPE PX_LexerGetNextLexeme(px_lexer *lexer) case 'r': PX_StringCatChar(&lexer->CurLexeme,'\r'); lexer->Sources++;lexer->Sources++;break; case 't': PX_StringCatChar(&lexer->CurLexeme,'\t'); lexer->Sources++;lexer->Sources++;break; case 'b': PX_StringCatChar(&lexer->CurLexeme,'\b'); lexer->Sources++;lexer->Sources++;break; + default: + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + break; } // } }else {