common_expression_language/
ast.rs

1#[derive(Debug)]
2pub enum RelationOp {
3    LessThan,
4    LessThanEq,
5    GreaterThan,
6    GreaterThanEq,
7    Equals,
8    NotEquals,
9    In,
10}
11
12#[derive(Debug)]
13pub enum ArithmeticOp {
14    Add,
15    Subtract,
16    Divide,
17    Multiply,
18    Modulus,
19}
20
21#[derive(Debug)]
22pub enum UnaryOp {
23    Not,
24    DoubleNot,
25    Minus,
26    DoubleMinus,
27}
28
29#[derive(Debug)]
30pub enum Expression {
31    Arithmetic { left: Box<Expression>, op: ArithmeticOp, right: Box<Expression> },
32    Relation { left: Box<Expression>, op: RelationOp, right: Box<Expression> },
33
34    Ternary { condition: Box<Expression>, left: Box<Expression>, right: Box<Expression> },
35    Or { left: Box<Expression>, right: Box<Expression> },
36    And { left: Box<Expression>, right: Box<Expression> },
37    Unary { op: UnaryOp, right: Box<Expression> },
38
39    Member { primary: Box<Expression>, member: Member },
40
41    Function { identifier: String, arguments: Vec<Box<Expression>> },
42    List { members: Vec<Box<Expression>> },
43    Map {fields: Vec<(Box<Expression>, Box<Expression>)>},
44
45    Literal(Literal),
46    Ident(String),
47}
48
49#[derive(Debug)]
50pub enum Member {
51    Attribute { identifier: String },
52    Function { identifier: String, arguments: Vec<Box<Expression>> },
53    Index { expression: Box<Expression> },
54    Fields { fields: Vec<(String, Box<Expression>)> },
55}
56
57
58#[derive(Debug)]
59pub enum Literal {
60    Int(i32),
61    UInt(u32),
62}