Add exponentation operator

+ Add hat token
 + Add exponentation operator

Implements #3
This commit is contained in:
Sebastian Schmidt 2019-03-19 18:32:10 +02:00
parent c631171ff0
commit 93e8d867b4
4 changed files with 7 additions and 2 deletions

View File

@ -105,7 +105,7 @@ Supported binary operators:
| / | 100 | Division | | \>= | 80 | Greater than or equal | | / | 100 | Division | | \>= | 80 | Greater than or equal |
| % | 100 | Modulo | | == | 80 | Equal | | % | 100 | Modulo | | == | 80 | Equal |
| && | 75 | Logical and | | != | 80 | Not equal | | && | 75 | Logical and | | != | 80 | Not equal |
| || | 70 | Logical or | | | | | || | 70 | Logical or | ^ | 120 | Exponentation |
Supported unary operators: Supported unary operators:

View File

@ -94,7 +94,7 @@
//! | / | 100 | Division | | \>= | 80 | Greater than or equal | //! | / | 100 | Division | | \>= | 80 | Greater than or equal |
//! | % | 100 | Modulo | | == | 80 | Equal | //! | % | 100 | Modulo | | == | 80 | Equal |
//! | && | 75 | Logical and | | != | 80 | Not equal | //! | && | 75 | Logical and | | != | 80 | Not equal |
//! | || | 70 | Logical or | | | | //! | || | 70 | Logical or | ^ | 120 | Exponentation |
//! //!
//! Supported unary operators: //! Supported unary operators:
//! //!

View File

@ -9,6 +9,7 @@ pub enum Token {
Star, Star,
Slash, Slash,
Percent, Percent,
Hat,
// Logic // Logic
Eq, Eq,
@ -56,6 +57,7 @@ fn char_to_partial_token(c: char) -> PartialToken {
'*' => PartialToken::Token(Token::Star), '*' => PartialToken::Token(Token::Star),
'/' => PartialToken::Token(Token::Slash), '/' => PartialToken::Token(Token::Slash),
'%' => PartialToken::Token(Token::Percent), '%' => PartialToken::Token(Token::Percent),
'^' => PartialToken::Token(Token::Hat),
'=' => PartialToken::Eq, '=' => PartialToken::Eq,
'!' => PartialToken::ExclamationMark, '!' => PartialToken::ExclamationMark,
@ -88,6 +90,7 @@ impl Token {
Token::Star => false, Token::Star => false,
Token::Slash => false, Token::Slash => false,
Token::Percent => false, Token::Percent => false,
Token::Hat => false,
Token::Eq => false, Token::Eq => false,
Token::Neq => false, Token::Neq => false,
@ -119,6 +122,7 @@ impl Token {
Token::Star => false, Token::Star => false,
Token::Slash => false, Token::Slash => false,
Token::Percent => false, Token::Percent => false,
Token::Hat => false,
Token::Eq => false, Token::Eq => false,
Token::Neq => false, Token::Neq => false,

View File

@ -101,6 +101,7 @@ pub fn tokens_to_operator_tree(tokens: Vec<Token>) -> Result<Node, Error> {
Token::Star => Some(Node::new(Mul)), Token::Star => Some(Node::new(Mul)),
Token::Slash => Some(Node::new(Div)), Token::Slash => Some(Node::new(Div)),
Token::Percent => Some(Node::new(Mod)), Token::Percent => Some(Node::new(Mod)),
Token::Hat => Some(Node::new(Exp)),
Token::Eq => Some(Node::new(Eq)), Token::Eq => Some(Node::new(Eq)),
Token::Neq => Some(Node::new(Neq)), Token::Neq => Some(Node::new(Neq)),