From 6b13991e397c7ecb3cb8691db816dfdf08139bd8 Mon Sep 17 00:00:00 2001 From: Hydrostic Date: Sat, 13 Jun 2026 09:11:17 +0800 Subject: [PATCH] fix(lexer): Update DELITIMER_CHARS --- src/lexer/lexer.rs | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/lexer/lexer.rs b/src/lexer/lexer.rs index 56c6efd..43a553a 100644 --- a/src/lexer/lexer.rs +++ b/src/lexer/lexer.rs @@ -16,7 +16,7 @@ pub struct Lexer { const WHITESPACE_CHARS: &[char] = &[' ', '\t', '\n', '\r']; const DELIMITER_CHARS: &[char] = &[ - '+', '-', '*', '/', '%', '=', '!', '<', '>', '(', ')', '[', ']', ',', ';', '{', '|', '&' + '+', '-', '*', '/', '%', '=', '!', '<', '>', '(', ')', '[', ']', ',', ';', '{', '}', '|', '&' ]; struct Cursor { chars: Vec, @@ -273,6 +273,8 @@ fn parse_puncuation( str_iter.advance(1); if let Some('+') = str_iter.peek() { TokenValue::PlusPlus + } else if let Some('=') = str_iter.peek() { + TokenValue::PlusEqual } else { str_iter.back(1); TokenValue::Plus @@ -282,14 +284,40 @@ fn parse_puncuation( str_iter.advance(1); if let Some('-') = str_iter.peek() { TokenValue::MinusMinus + } else if let Some('=') = str_iter.peek() { + TokenValue::MinusEqual } else { str_iter.back(1); TokenValue::Minus } }, - '*' => TokenValue::Star, - '/' => TokenValue::Slash, - '%' => TokenValue::Percent, + '*' => { + str_iter.advance(1); + if let Some('=') = str_iter.peek() { + TokenValue::StarEqual + } else { + str_iter.back(1); + TokenValue::Star + } + }, + '/' => { + str_iter.advance(1); + if let Some('=') = str_iter.peek() { + TokenValue::SlashEqual + } else { + str_iter.back(1); + TokenValue::Slash + } + }, + '%' => { + str_iter.advance(1); + if let Some('=') = str_iter.peek() { + TokenValue::PercentEqual + } else { + str_iter.back(1); + TokenValue::Percent + } + }, '=' => get_value_by_next_char(str_iter, TokenValue::Equal, TokenValue::DoubleEqual), '!' => {