1pub mod predictive;
9
10use std::collections::VecDeque;
11
12use crate::tokens::Token;
13
14#[derive(Debug, Clone)]
15pub struct AST<'a> {
16 pub expressions: Expressions<'a>,
17}
18
19#[derive(Debug, Clone)]
20pub struct Expressions<'a> {
21 pub expressions: VecDeque<Expression<'a>>,
22}
23
24#[derive(Debug, Clone)]
25pub enum Expression<'a> {
26 Frac(BiExpression<'a>),
27 Sub(BiExpression<'a>),
28 Pow(BiExpression<'a>),
29 SubPow(TriExpression<'a>),
30 Group(Group<'a>),
31 Unary(Unary<'a>),
32 Binary(Binary<'a>),
33 Literal(Literal<'a>),
34 Expressions(Expressions<'a>),
35 Unit,
36}
37
38#[derive(Debug, Clone)]
39pub struct TriExpression<'a> {
40 pub expression_1: Box<Expression<'a>>,
41 pub expression_2: Box<Expression<'a>>,
42 pub expression_3: Box<Expression<'a>>,
43}
44
45#[derive(Debug, Clone)]
46pub struct BiExpression<'a> {
47 pub expression_1: Box<Expression<'a>>,
48 pub expression_2: Box<Expression<'a>>,
49}
50
51#[derive(Debug, Clone)]
52pub struct Unary<'a> {
53 pub operator: Token<'a>,
54 pub expression: Box<Expression<'a>>,
55}
56
57#[derive(Debug, Clone)]
58pub struct Binary<'a> {
59 pub operator: Token<'a>,
60 pub expression_1: Box<Expression<'a>>,
61 pub expression_2: Box<Expression<'a>>,
62}
63
64#[derive(Debug, Clone)]
65pub struct Group<'a> {
66 pub l_brace: Token<'a>,
67 pub expressions: Expressions<'a>,
68 pub r_brace: Token<'a>,
69}
70
71#[derive(Debug, Clone)]
72pub enum Literal<'a> {
73 Literal(Token<'a>), Table(Table<'a>),
75}
76
77#[derive(Debug, Clone)]
78pub struct Table<'a> {
79 pub seperators: Vec<usize>,
80 pub l_brace: Token<'a>,
81 pub rows: Vec<TableRow<'a>>,
85 pub r_brace: Token<'a>,
86}
87
88#[derive(Debug, Clone)]
89pub struct TableRow<'a> {
90 pub cols: Vec<Expressions<'a>>,
91}