mini_builder_rs/parser/
expression.rs

1use crate::{tokenizer::token::TokenType, value::Value};
2
3/// Sequence of expressions.
4pub type Expressions<'a> = Vec<Box<Expression<'a>>>;
5
6/// Named sequence of expressions.
7pub type NamedExpressions<'a> = Vec<Box<(&'a str, Expression<'a>)>>;
8
9/// Expressions are trees of operations that can be evaluated into a [Value].
10#[derive(Debug, Clone)]
11pub enum Expression<'a> {
12	// arithmetics
13	Additive(Expressions<'a>, Expressions<'a>),
14	Multiplicative(Expressions<'a>, Expressions<'a>),
15	Negate(Box<Expression<'a>>),
16	// logic
17	Or(Expressions<'a>),
18	And(Expressions<'a>),
19	Not(Box<Expression<'a>>),
20	// compare
21	Comparison(Box<Expression<'a>>, TokenType, Box<Expression<'a>>),
22	// value
23	Value(Value),
24	Variable(&'a str),
25	ListValue(Expressions<'a>),
26	// TODO: rename this
27	Builder(&'a str, NamedExpressions<'a>),
28	FunctionCall(&'a str, Expressions<'a>),
29	IndexOf(Box<Expression<'a>>, Box<Expression<'a>>),
30	// control flow
31	Ternary(
32		Box<Expression<'a>>,
33		Box<Expression<'a>>,
34		Box<Expression<'a>>,
35	),
36}