From 289febcbb6c99abcfbf874a06d8fca68601b20a6 Mon Sep 17 00:00:00 2001 From: myyrakle Date: Sat, 17 Aug 2024 00:59:28 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[#155]=20!=3D=20=EC=97=B0=EC=82=B0=EC=9E=90?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=ED=99=94=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/executor/initializer.rs | 1 + src/lexer/tokenizer.rs | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/executor/initializer.rs b/src/executor/initializer.rs index 1620cfe5..60d88765 100644 --- a/src/executor/initializer.rs +++ b/src/executor/initializer.rs @@ -132,6 +132,7 @@ impl Executor { self.check_output_status(output) } + #[allow(dead_code)] async fn write_and_check_err( &self, base_path: PathBuf, diff --git a/src/lexer/tokenizer.rs b/src/lexer/tokenizer.rs index a036d4f1..4f337c80 100644 --- a/src/lexer/tokenizer.rs +++ b/src/lexer/tokenizer.rs @@ -284,7 +284,19 @@ impl Tokenizer { } '+' => Token::Operator(OperatorToken::Plus), '*' => Token::Operator(OperatorToken::Asterisk), - '!' => Token::Operator(OperatorToken::Not), // TODO: != 연산자 처리 + '!' => { + // 다음 문자가 =일 경우 != 연산자로 처리 + + self.read_char(); + + if self.last_char == '=' { + Token::Operator(OperatorToken::Neq) + } else { + self.unread_char(); + + Token::Operator(OperatorToken::Not) + } + } '=' => Token::Operator(OperatorToken::Eq), '<' => Token::Operator(OperatorToken::Lt), // TODO: <= 연산자 처리 '>' => Token::Operator(OperatorToken::Gt), // TODO: >= 연산자 처리 From 4ee7a2063150fe606bd902684d85137afc78edb1 Mon Sep 17 00:00:00 2001 From: myyrakle Date: Sat, 17 Aug 2024 21:03:21 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[#155]=20!=3D=20=EC=97=B0=EC=82=B0=EC=9E=90?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BC=80=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lexer/test/select.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lexer/test/select.rs b/src/lexer/test/select.rs index 51ba2c50..dc14e95d 100644 --- a/src/lexer/test/select.rs +++ b/src/lexer/test/select.rs @@ -243,6 +243,17 @@ pub fn test_operators() { Token::Integer(2), ], }, + TestCase { + name: "연산자: !=".to_owned(), + input: r#"SELECT 1 != 2"#.to_owned(), + want_error: false, + expected: vec![ + Token::Select, + Token::Integer(1), + Token::Operator(OperatorToken::Neq), + Token::Integer(2), + ], + }, TestCase { name: "연산자: !".to_owned(), input: r#"SELECT ! True"#.to_owned(), From 1097dee82f4da5fb91eeb1426696610aeb0edaf4 Mon Sep 17 00:00:00 2001 From: myyrakle Date: Sat, 17 Aug 2024 21:05:50 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[#155]=20<=3D=20=EC=97=B0=EC=82=B0=EC=9E=90?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=ED=99=94=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lexer/tokenizer.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lexer/tokenizer.rs b/src/lexer/tokenizer.rs index 4f337c80..6874a9fc 100644 --- a/src/lexer/tokenizer.rs +++ b/src/lexer/tokenizer.rs @@ -298,7 +298,19 @@ impl Tokenizer { } } '=' => Token::Operator(OperatorToken::Eq), - '<' => Token::Operator(OperatorToken::Lt), // TODO: <= 연산자 처리 + '<' => { + // 다음 문자가 =일 경우 <= 연산자로 처리 + + self.read_char(); + + if self.last_char == '=' { + Token::Operator(OperatorToken::Lte) + } else { + self.unread_char(); + + Token::Operator(OperatorToken::Lt) + } + } '>' => Token::Operator(OperatorToken::Gt), // TODO: >= 연산자 처리 _ => { return Err(LexingError::wrap(format!( From 3bc6557d93b954b5769b982db5b3478c35e9bd82 Mon Sep 17 00:00:00 2001 From: myyrakle Date: Sat, 17 Aug 2024 21:06:24 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[#155]=20<=3D=20=EC=97=B0=EC=82=B0=EC=9E=90?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BC=80=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lexer/test/select.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lexer/test/select.rs b/src/lexer/test/select.rs index dc14e95d..80b59d4e 100644 --- a/src/lexer/test/select.rs +++ b/src/lexer/test/select.rs @@ -188,6 +188,17 @@ pub fn test_operators() { Token::Integer(2), ], }, + TestCase { + name: "연산자: <=".to_owned(), + input: r#"SELECT 1 <= 2"#.to_owned(), + want_error: false, + expected: vec![ + Token::Select, + Token::Integer(1), + Token::Operator(OperatorToken::Lte), + Token::Integer(2), + ], + }, TestCase { name: "연산자: >".to_owned(), input: r#"SELECT 1 > 2"#.to_owned(), From 8f24583450d74b3465bc24f3641a0b30f7e1e215 Mon Sep 17 00:00:00 2001 From: myyrakle Date: Sat, 17 Aug 2024 21:07:00 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[#155]=20>=3D=20=EC=97=B0=EC=82=B0=EC=9E=90?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=ED=99=94=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lexer/tokenizer.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lexer/tokenizer.rs b/src/lexer/tokenizer.rs index 6874a9fc..42f2a894 100644 --- a/src/lexer/tokenizer.rs +++ b/src/lexer/tokenizer.rs @@ -311,7 +311,19 @@ impl Tokenizer { Token::Operator(OperatorToken::Lt) } } - '>' => Token::Operator(OperatorToken::Gt), // TODO: >= 연산자 처리 + '>' => { + // 다음 문자가 =일 경우 >= 연산자로 처리 + + self.read_char(); + + if self.last_char == '=' { + Token::Operator(OperatorToken::Gte) + } else { + self.unread_char(); + + Token::Operator(OperatorToken::Gt) + } + } _ => { return Err(LexingError::wrap(format!( "unexpected operator: {:?}", From 73c012e57dde33c87e9931ff4528ac6a6d675f66 Mon Sep 17 00:00:00 2001 From: myyrakle Date: Sat, 17 Aug 2024 21:07:23 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[#155]=20>=3D=20=EC=97=B0=EC=82=B0=EC=9E=90?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BC=80=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lexer/test/select.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lexer/test/select.rs b/src/lexer/test/select.rs index 80b59d4e..86a083a5 100644 --- a/src/lexer/test/select.rs +++ b/src/lexer/test/select.rs @@ -210,6 +210,17 @@ pub fn test_operators() { Token::Integer(2), ], }, + TestCase { + name: "연산자: >=".to_owned(), + input: r#"SELECT 1 >= 2"#.to_owned(), + want_error: false, + expected: vec![ + Token::Select, + Token::Integer(1), + Token::Operator(OperatorToken::Gte), + Token::Integer(2), + ], + }, TestCase { name: "연산자: -".to_owned(), input: r#"SELECT 1 - 2"#.to_owned(),