expr_solver/
token.rs

1// List of all the tokens possible.
2#[derive(Debug, Clone, Copy)]
3pub enum Token {
4    // we store numbers as rust's f64.
5    Number(f64),
6    // operators.
7    Plus,
8    Minus,
9    Star,
10    Slash,
11    Bang,
12    // Grouping
13    LeftParen,
14    RightParen,
15    // end of file for ease of use.
16    Eof,
17}
18
19impl core::fmt::Display for Token {
20    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
21        match self {
22            Token::Number(n) => write!(f, " {n} "),
23            Token::Plus => write!(f, " + "),
24            Token::Minus => write!(f, " - "),
25            Token::Star => write!(f, " * "),
26            Token::Slash => write!(f, " / "),
27            Token::Bang => write!(f, " ! "),
28            Token::Eof => write!(f, " EOF "),
29            Token::LeftParen => write!(f, " ( "),
30            Token::RightParen => write!(f, " ) "),
31        }
32    }
33}