54 lines
1 KiB
Rust
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,
|
|
},
|
|
}
|