fips_md/parser/
expression.rs1use super::{CompileTimeConstant, Statement};
4
5#[derive(Clone,PartialEq,Debug)]
7pub enum Expression {
8 Atom(Atom),
10 BinaryOperation(BinaryOperation),
12 FunctionCall(FunctionCall),
14 Block(BlockExpression),
16 Indexing(AtIndex),
18 AdHocArray(AdHocArrayExpression)
20}
21
22#[derive(Clone,PartialEq,Debug)]
24pub enum Atom {
25 Variable(String),
27 NamespaceVariable { namespace: String, name: String },
29 Literal(Literal)
31}
32
33#[derive(Clone,PartialEq,Debug)]
35pub enum Literal {
36 Double(f64),
37 Int64(i64)
38}
39
40#[derive(Clone,PartialEq,Debug)]
42pub struct BinaryOperation {
43 pub lhs: Box<Expression>,
45 pub rhs: Box<Expression>,
47 pub op: BinaryOperator
49}
50
51#[derive(Copy,Clone,Eq,PartialEq,Debug)]
53pub enum BinaryOperator {
54 Add, Sub,
55 Mul, Div
56}
57
58#[derive(Clone,PartialEq,Debug)]
60pub struct FunctionCall {
61 pub fn_name: String,
63 pub parameters: Vec<Expression>
65}
66
67#[derive(Clone,PartialEq,Debug)]
69pub struct BlockExpression {
70 pub statements: Vec<Statement>,
71 pub expression: Box<Expression>
72}
73
74
75#[derive(Clone,PartialEq,Debug)]
77pub struct AtIndex {
78 pub array: String,
79 pub index: CompileTimeConstant<usize>
80}
81
82#[derive(Clone,PartialEq,Debug)]
83pub struct AdHocArrayExpression {
84 pub elements: Vec<Expression>
85}