Skip to main content

iso_10303/express/
expression.rs

1#[derive(Debug, Clone)]
2pub struct Expression {
3    pub operand: SimpleExpression,
4    pub operations: Vec<(Operator, SimpleExpression)>,
5}
6
7#[derive(Debug, Clone)]
8pub struct SimpleExpression {
9    pub operand: Term,
10    pub operations: Vec<(Operator, Term)>,
11}
12
13#[derive(Debug, Clone)]
14pub struct Term {
15    pub operand: Factor,
16    pub operations: Vec<(Operator, Factor)>,
17}
18
19#[derive(Debug, Clone)]
20pub struct Factor {
21    pub operand: SimpleFactor,
22    pub operations: Vec<(Operator, SimpleFactor)>,
23}
24
25#[derive(Debug, Clone)]
26pub enum Operator {
27    Equal,
28    NotEqual,
29    Greater,
30    Less,
31    GreaterOrEqual,
32    LessOrEqual,
33    InstanceEqual,
34    InstanceNotEqual,
35    In,
36    Like,
37    Add,
38    Sub,
39    Mul,
40    Div,
41    Mod,
42    Or,
43    Xor,
44    And,
45    Not,
46    Neg,
47    Power,
48}
49
50#[derive(Debug, Clone)]
51pub enum SimpleFactor {
52    AggregateInitializer {
53        elements: Vec<Box<Expression>>,
54    },
55    EnityConstructor {
56        entity: String,
57        parameters: Vec<Box<Expression>>,
58    },
59    EnumReference,
60    Interval {
61        low: Box<SimpleExpression>,
62        op1: Operator,
63        term: Box<SimpleExpression>,
64        op2: Operator,
65        high: Box<SimpleExpression>,
66    },
67    QueryExpression {
68        variable: String,
69        source: Box<SimpleExpression>,
70        condition: Box<Expression>,
71    },
72    UnaryExpression {
73        op: Operator,
74        operand: QualifiedAccess,
75    },
76    QualifiedAccess(QualifiedAccess),
77}
78
79#[derive(Debug, Clone)]
80pub struct QualifiedAccess {
81    pub base: Primary,
82    pub accessors: Vec<Accessor>,
83}
84
85#[derive(Debug, Clone)]
86pub enum Primary {
87    Literal(Literal),
88    Constant(String),
89    Reference(String),
90    Grouped(Box<Expression>),
91}
92
93#[derive(Debug, Clone)]
94pub enum Literal {
95    Binary(String),
96    Integer(i64),
97    Real(f64),
98    Logical(Option<bool>),
99    String(String),
100}
101
102#[derive(Debug, Clone)]
103pub enum Accessor {
104    FunctionCall {
105        parameters: Vec<Box<Expression>>,
106    },
107    Indexer {
108        start: Box<SimpleExpression>,
109        end: Option<Box<SimpleExpression>>,
110    },
111    Attribute {
112        name: String,
113    },
114    Group {
115        entity: String,
116    },
117}