scicalc_rs/
token.rs

1use crate::decimal::DecimalNumber;
2use std::fmt;
3
4#[derive(Debug, Clone, PartialEq)]
5pub enum Token {
6    PosNum(DecimalNumber), //Positive number literal
7
8    //Constants
9    EulersNum, //Euler's number
10    Pi,        //pi
11
12    //Measurement
13    PlusMinus, //'±', used as a separator in measurements
14
15    //Operators
16    Add,   //'+'
17    Minus, //'-'  NOTE: could be prefix 'minus' or the infix subtraction operator
18    Mul,   //'*'
19    Div,   //'/'
20    Caret, //'^'
21
22    //Grouping
23    LeftParen,  // '('
24    RightParen, // ')'
25
26    //End-of-file
27    Eof,
28}
29
30impl fmt::Display for Token {
31    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32        match self {
33            Token::PosNum(d) => write!(f, "{}", d),
34            Token::EulersNum => write!(f, "e"),
35            Token::Pi => write!(f, "π"),
36            Token::PlusMinus => write!(f, "±"),
37            Token::Add => write!(f, "+"),
38            Token::Minus => write!(f, "-"),
39            Token::Mul => write!(f, "*"),
40            Token::Div => write!(f, "/"),
41            Token::Caret => write!(f, "^"),
42            Token::LeftParen => write!(f, "("),
43            Token::RightParen => write!(f, ")"),
44            Token::Eof => write!(f, "EOF"), //useful for debugging
45        }
46    }
47}