iso_10303/express/
expression.rs1#[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}