mirror of
https://github.com/gorules/zen.git
synced 2026-10-06 08:02:18 +00:00
* temp: zen-expression rewrite * rewrite standard parser * stabilise parser, upgrade dependencies * implement unary parser * align builtin behavior * fix tests and minor bugs * refactor exports, update docs * fix expression repl * cleanup * cleanup vm * replace expression with expression-rewrite * update d.ts file * fix failing test
50 lines
1.0 KiB
Rust
50 lines
1.0 KiB
Rust
use rust_decimal::Decimal;
|
|
|
|
use crate::lexer::Operator;
|
|
use crate::parser::builtin::BuiltInFunction;
|
|
|
|
#[derive(Debug, PartialEq, Clone)]
|
|
pub enum Node<'a> {
|
|
Null,
|
|
Bool(bool),
|
|
Number(Decimal),
|
|
String(&'a str),
|
|
Pointer,
|
|
Array(&'a [&'a Node<'a>]),
|
|
Identifier(&'a str),
|
|
Closure(&'a Node<'a>),
|
|
Member {
|
|
node: &'a Node<'a>,
|
|
property: &'a Node<'a>,
|
|
},
|
|
Slice {
|
|
node: &'a Node<'a>,
|
|
from: Option<&'a Node<'a>>,
|
|
to: Option<&'a Node<'a>>,
|
|
},
|
|
Interval {
|
|
left: &'a Node<'a>,
|
|
right: &'a Node<'a>,
|
|
left_bracket: &'a str,
|
|
right_bracket: &'a str,
|
|
},
|
|
Conditional {
|
|
condition: &'a Node<'a>,
|
|
on_true: &'a Node<'a>,
|
|
on_false: &'a Node<'a>,
|
|
},
|
|
Unary {
|
|
node: &'a Node<'a>,
|
|
operator: Operator,
|
|
},
|
|
Binary {
|
|
left: &'a Node<'a>,
|
|
operator: Operator,
|
|
right: &'a Node<'a>,
|
|
},
|
|
BuiltIn {
|
|
kind: BuiltInFunction,
|
|
arguments: &'a [&'a Node<'a>],
|
|
},
|
|
}
|