crafting-interpreters/src/expression.rs

54 lines
1 KiB
Rust

use crate::token::{self, Token};
/// Enumeration of all types of expressions.
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Expression {
Assign {
name: Token,
value: Box<Expression>,
},
Binary {
left: Box<Expression>,
operator: Token,
right: Box<Expression>,
},
Call {
callee: Box<Expression>,
paren: Token,
args: Vec<Expression>,
},
Get {
object: Box<Expression>,
name: Token,
},
Set {
object: Box<Expression>,
name: Token,
value: Box<Expression>,
},
This {
keyword: Token,
},
Grouping {
expression: Box<Expression>,
},
Literal {
value: token::Literal,
},
Logical {
left: Box<Expression>,
operator: Token,
right: Box<Expression>,
},
Unary {
operator: Token,
right: Box<Expression>,
},
Variable {
name: Token,
},
Super {
keyword: Token,
method: Token,
},
}