2025-02-10 14:36:55 +01:00
|
|
|
use crate::token::{self, Token};
|
|
|
|
|
2025-02-12 10:30:51 +01:00
|
|
|
/// Enumeration of all types of expressions.
|
2025-05-25 10:52:20 +02:00
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
2025-02-10 14:36:55 +01:00
|
|
|
pub enum Expression {
|
2025-02-12 10:30:51 +01:00
|
|
|
Assign {
|
|
|
|
name: Token,
|
|
|
|
value: Box<Expression>,
|
|
|
|
},
|
2025-02-10 14:36:55 +01:00
|
|
|
Binary {
|
|
|
|
left: Box<Expression>,
|
|
|
|
operator: Token,
|
|
|
|
right: Box<Expression>,
|
|
|
|
},
|
2025-02-13 12:29:31 +01:00
|
|
|
Call {
|
|
|
|
callee: Box<Expression>,
|
|
|
|
paren: Token,
|
|
|
|
args: Vec<Expression>,
|
|
|
|
},
|
2025-02-10 14:36:55 +01:00
|
|
|
Grouping {
|
|
|
|
expression: Box<Expression>,
|
|
|
|
},
|
|
|
|
Literal {
|
|
|
|
value: token::Literal,
|
|
|
|
},
|
2025-02-12 13:10:07 +01:00
|
|
|
Logical {
|
|
|
|
left: Box<Expression>,
|
|
|
|
operator: Token,
|
|
|
|
right: Box<Expression>,
|
|
|
|
},
|
2025-02-10 14:36:55 +01:00
|
|
|
Unary {
|
|
|
|
operator: Token,
|
|
|
|
right: Box<Expression>,
|
|
|
|
},
|
2025-02-12 10:30:51 +01:00
|
|
|
Variable {
|
|
|
|
name: Token,
|
|
|
|
},
|
2025-02-10 14:36:55 +01:00
|
|
|
}
|