mirror of
https://github.com/TheM1Stery/izanami.git
synced 2025-04-20 00:41:11 +00:00
49 lines
786 B
Rust
49 lines
786 B
Rust
use crate::token::{LiteralType, Token};
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub enum Expr {
|
|
Ternary {
|
|
first: Box<Expr>,
|
|
second: Box<Expr>,
|
|
third: Box<Expr>,
|
|
},
|
|
Binary {
|
|
left: Box<Expr>,
|
|
op: Token,
|
|
right: Box<Expr>,
|
|
},
|
|
Grouping {
|
|
expression: Box<Expr>,
|
|
},
|
|
Literal {
|
|
value: LiteralType,
|
|
},
|
|
Unary {
|
|
op: Token,
|
|
right: Box<Expr>,
|
|
},
|
|
Variable {
|
|
name: Token,
|
|
},
|
|
Assign {
|
|
name: Token,
|
|
value: Box<Expr>,
|
|
},
|
|
}
|
|
|
|
pub enum Stmt {
|
|
Block {
|
|
statements: Vec<Stmt>,
|
|
},
|
|
Expression {
|
|
expression: Expr,
|
|
},
|
|
Print {
|
|
expression: Expr,
|
|
},
|
|
Var {
|
|
name: Token,
|
|
initializer: Option<Expr>,
|
|
},
|
|
}
|