izanami/src/ast.rs
Seymur Bagirov 9262620e07 feat: finish chapter 8
challenges will be done as well, won't skip them
2025-01-13 08:25:34 +04:00

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>,
},
}