1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use crate::TokenKind;
#[derive(Debug, PartialEq)]
pub enum Expression {
String(String),
Number(f64),
Bool(bool),
Identifier(String),
Prefix(Op, Box<Expression>),
Infix(Box<Expression>, Op, Box<Expression>),
Call(Box<Expression>, Vec<Expression>),
}
impl Expression {
pub fn boxed(self) -> Box<Self> {
Box::new(self)
}
}
#[derive(Debug, PartialEq)]
pub enum Op {
Add,
Subtract,
Multiply,
Divide,
}
impl From<TokenKind> for Op {
fn from(kind: TokenKind) -> Self {
match kind {
TokenKind::Plus => Op::Add,
TokenKind::Minus => Op::Subtract,
TokenKind::Asterisk => Op::Multiply,
TokenKind::Slash => Op::Divide,
_ => todo!()
}
}
}