From b5ab9f51ff645b463c90d778150f4ade045678dd Mon Sep 17 00:00:00 2001 From: Tristan Date: Thu, 8 May 2025 20:51:07 -0400 Subject: [PATCH] added Some and Not --- src/lexer/lexer.rs | 2 ++ src/lexer/token.rs | 2 ++ src/parser/ast.rs | 2 ++ src/parser/parser.rs | 4 +++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lexer/lexer.rs b/src/lexer/lexer.rs index 957df42..fce3555 100644 --- a/src/lexer/lexer.rs +++ b/src/lexer/lexer.rs @@ -248,6 +248,8 @@ impl Lexer { "sym" => Token::Sym, "module" => Token::Module, "import" => Token::Import, + "some" => Token::Some, + "not" => Token::Not, _ => Token::Identifier(text), }; diff --git a/src/lexer/token.rs b/src/lexer/token.rs index 0fe799a..18ff0d2 100644 --- a/src/lexer/token.rs +++ b/src/lexer/token.rs @@ -46,6 +46,8 @@ pub enum Token { Sym, Module, Import, + Some, + Not, // Comments Comment(String), diff --git a/src/parser/ast.rs b/src/parser/ast.rs index 4b93baa..1319f5a 100644 --- a/src/parser/ast.rs +++ b/src/parser/ast.rs @@ -24,6 +24,8 @@ pub enum Operator { // Unary Minus, // For unary negation e.g. -5 Almost, // For unary ~ e.g. ~5 + Some, // For unary ? e.g. ?5 + Not, // For unary ! e.g. !true // Binary Plus, // For addition e.g. 5 + 5 diff --git a/src/parser/parser.rs b/src/parser/parser.rs index c52294c..cc09864 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -238,11 +238,13 @@ impl Parser { let operator_token_snapshot = self.current_token().clone(); match operator_token_snapshot { - Token::Minus | Token::Tilde => { + Token::Minus | Token::Tilde | Token::Some | Token::Not => { self.advance(); let ast_operator = match operator_token_snapshot { Token::Minus => Operator::Minus, Token::Tilde => Operator::Almost, + Token::Some => Operator::Some, + Token::Not => Operator::Not, _ => unreachable!("Lexer should not produce other tokens here if first match is minus/tilde. Checked by matches! macro."), };