crafting-interpreters/rust/rox/src/expression.rs

51 lines
988 B
Rust
Raw Normal View History

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-05-25 16:04:00 +02:00
Get {
object: Box<Expression>,
name: Token,
},
Set {
object: Box<Expression>,
name: Token,
value: Box<Expression>,
},
This {
keyword: Token,
},
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
}