From 93e8d867b430e4edb3ef20a951398b0aefdb2042 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Tue, 19 Mar 2019 18:32:10 +0200 Subject: [PATCH] Add exponentation operator + Add hat token + Add exponentation operator Implements #3 --- README.md | 2 +- src/lib.rs | 2 +- src/token/mod.rs | 4 ++++ src/tree/mod.rs | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index badf0a9..6df1aac 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ Supported binary operators: | / | 100 | Division | | \>= | 80 | Greater than or equal | | % | 100 | Modulo | | == | 80 | Equal | | && | 75 | Logical and | | != | 80 | Not equal | -| || | 70 | Logical or | | | | +| || | 70 | Logical or | ^ | 120 | Exponentation | Supported unary operators: diff --git a/src/lib.rs b/src/lib.rs index 5b30b74..c02cb4b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -94,7 +94,7 @@ //! | / | 100 | Division | | \>= | 80 | Greater than or equal | //! | % | 100 | Modulo | | == | 80 | Equal | //! | && | 75 | Logical and | | != | 80 | Not equal | -//! | || | 70 | Logical or | | | | +//! | || | 70 | Logical or | ^ | 120 | Exponentation | //! //! Supported unary operators: //! diff --git a/src/token/mod.rs b/src/token/mod.rs index bc07f11..d5f5c1d 100644 --- a/src/token/mod.rs +++ b/src/token/mod.rs @@ -9,6 +9,7 @@ pub enum Token { Star, Slash, Percent, + Hat, // Logic Eq, @@ -56,6 +57,7 @@ fn char_to_partial_token(c: char) -> PartialToken { '*' => PartialToken::Token(Token::Star), '/' => PartialToken::Token(Token::Slash), '%' => PartialToken::Token(Token::Percent), + '^' => PartialToken::Token(Token::Hat), '=' => PartialToken::Eq, '!' => PartialToken::ExclamationMark, @@ -88,6 +90,7 @@ impl Token { Token::Star => false, Token::Slash => false, Token::Percent => false, + Token::Hat => false, Token::Eq => false, Token::Neq => false, @@ -119,6 +122,7 @@ impl Token { Token::Star => false, Token::Slash => false, Token::Percent => false, + Token::Hat => false, Token::Eq => false, Token::Neq => false, diff --git a/src/tree/mod.rs b/src/tree/mod.rs index 3d5b1e6..b286335 100644 --- a/src/tree/mod.rs +++ b/src/tree/mod.rs @@ -101,6 +101,7 @@ pub fn tokens_to_operator_tree(tokens: Vec) -> Result { Token::Star => Some(Node::new(Mul)), Token::Slash => Some(Node::new(Div)), Token::Percent => Some(Node::new(Mod)), + Token::Hat => Some(Node::new(Exp)), Token::Eq => Some(Node::new(Eq)), Token::Neq => Some(Node::new(Neq)),