common_expression_language/
ast.rs1#[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}