MicroModelicaCCompiler  4.5.3
expression.hpp
Go to the documentation of this file.
1 /*****************************************************************************
2 
3  This file is part of QSS Solver.
4 
5  QSS Solver is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  QSS Solver is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with QSS Solver. If not, see <http://www.gnu.org/licenses/>.
17 
18  ******************************************************************************/
19 
20 #ifndef AST_EXPRESSION_H_
21 #define AST_EXPRESSION_H_
22 
23 #include <string>
24 
25 #include "../util/macros.hpp"
26 #include "../util/util_types.hpp"
27 #include "ast_node.hpp"
28 #include "ast_types.hpp"
29 
30 class AST_Expression_ : public AST_Node_ {
31  public:
32  virtual ~AST_Expression_();
33  DEFINE_CLASS_PRINTER(AST_Expression);
34  virtual string print() const = 0;
36  void accept(AST_Visitor *visitor);
37  GET_AS(Expression, BinOp);
38  GET_AS(Expression, Boolean);
39  GET_AS(Expression, BooleanNot);
40  GET_AS(Expression, Brace);
41  GET_AS(Expression, Call);
42  GET_AS(Expression, CallArgs);
43  GET_AS(Expression, ComponentReference);
44  GET_AS(Expression, Derivative);
45  GET_AS(Expression, If);
46  GET_AS(Expression, Integer);
47  GET_AS(Expression, Output);
48  GET_AS(Expression, Range);
49  GET_AS(Expression, Real);
50  GET_AS(Expression, UMinus);
51  GET_AS(Expression, String);
52  GET_AS(Expression, NamedArgument);
53  GET_AS(Expression, ArrayIndex);
54  GET_AS(Expression, Bracket);
55  AST_Expression_If_ElseIf getAsElseIf();
56 };
57 
59  public:
61  string print() const;
62  AST_Integer val();
64 
65  private:
67 };
68 
70  public:
71  AST_Expression_Real_(double d);
72  string print() const;
74  double val() { return _d; };
75 
76  private:
77  double _d;
78 };
79 
81  public:
82  AST_Expression_String_(string s);
83  string print() const;
84  string str() const;
86 
87  private:
88  string _s;
89 };
90 
92  public:
94  string print() const;
95  bool value();
97 
98  private:
99  bool _b;
100 };
101 
103  public:
104  AST_Expression_Derivative_(AST_ExpressionList el);
106  AST_ExpressionList arguments();
107  string print() const;
108 
109  private:
110  AST_ExpressionList _el;
111 };
112 
114  public:
115  AST_Expression_UMinus_(AST_Expression e);
116  string print() const;
117  AST_Expression exp() const;
119 
120  private:
121  AST_Expression _e;
122 };
123 
125  public:
126  AST_Expression_BooleanNot_(AST_Expression e);
128  string print() const;
129  AST_Expression exp() const;
130 
131  private:
132  AST_Expression _e;
133 };
134 
136  public:
137  AST_Expression_Call_(AST_String name, AST_ExpressionList args);
138  AST_Expression_Call_(AST_String name, AST_ExpressionList args, AST_ExpressionList output_args);
139  string print() const;
140  AST_String name() const;
141  AST_ExpressionList arguments() const;
142  AST_ExpressionList outputArguments() const;
143 
144  virtual ExpressionType expressionType();
145 
146  private:
148  AST_ExpressionList _args;
149  AST_ExpressionList _output_args;
150 };
151 
153  public:
154  AST_Expression_CallArgs_(AST_ExpressionList args);
155  AST_ExpressionList arguments() const;
157  string print() const;
158 
159  private:
160  AST_ExpressionList _args;
161 };
162 
164  public:
165  AST_Expression_Brace_(AST_ExpressionList args);
166  AST_ExpressionList arguments() const;
168  string print() const;
169 
170  private:
171  AST_ExpressionList _args;
172 };
173 
175  public:
178  string print() const;
179  void append(AST_String, AST_ExpressionList);
180  void prepend(AST_String, AST_ExpressionList);
182  AST_StringList names() const;
183  string name();
184  const char *cname();
185  bool hasIndexes() const;
186  AST_ExpressionListList indexes() const;
187  AST_ExpressionList firstIndex();
188 
189  private:
190  AST_StringList _name;
191  AST_ExpressionListList _indexes;
192 };
193 
195  public:
196  AST_Expression_BinOp_(AST_Expression e1, AST_Expression e2, BinOpType t);
197  string print() const;
199  AST_Expression left() const;
200  AST_Expression right() const;
201  BinOpType binopType() const;
202 
203  private:
204  AST_Expression _e1, _e2;
206 };
207 
209  public:
210  AST_Expression_If_(AST_Expression cond, AST_Expression then, AST_Expression else_exp, AST_ExpressionList elseif_list);
211  string print() const;
212  AST_Expression condition() const;
213  AST_Expression then() const;
214  AST_Expression else_exp() const;
215  AST_ExpressionList elseif_list() const;
217 
218  private:
219  AST_Expression _cond, _then, _else_exp;
220  AST_ExpressionList _elseif_list;
221 };
222 
224  public:
225  string print() const;
227 };
228 
230  public:
231  string print() const;
233 };
234 
236  public:
237  AST_Expression_If_ElseIf_(AST_Expression, AST_Expression);
238  string print() const;
240  AST_Expression condition();
241  AST_Expression then();
242 
243  private:
244  AST_Expression _cond;
245  AST_Expression _then;
246 };
247 
249  public:
250  string print() const;
252 };
253 
255  public:
256  AST_Expression_Output_(AST_ExpressionList);
258  string print() const;
259  AST_ExpressionList expressionList();
260 
261  private:
262  AST_ExpressionList _list;
263 };
264 
266  public:
267  AST_Expression_Range_(AST_ExpressionList);
269  string print() const;
270  AST_ExpressionList expressionList();
271 
272  private:
273  AST_ExpressionList _list;
274 };
275 
277  public:
278  AST_Expression_NamedArgument_(AST_String name, AST_Expression exp);
280  string print() const;
281  AST_Expression expression();
282  AST_String name();
283 
284  private:
285  AST_Expression _exp;
287 };
288 
290  public:
291  AST_Expression_ArrayIndex_(AST_Expression exp, int size);
293  string print() const;
294  AST_Expression expression();
295  int size();
296 
297  private:
298  AST_Expression _exp;
299  int _size;
300 };
301 
303  public:
304  AST_Expression_Bracket_(AST_ExpressionList ranges);
306  string print() const;
307  AST_ExpressionList ranges();
308 
309  private:
310  AST_ExpressionList _ranges;
311 };
312 
313 #endif /* AST_EXPRESSION_H_ */
AST_Expression_Brace_::AST_Expression_Brace_
AST_Expression_Brace_(AST_ExpressionList args)
Definition: expression.cpp:250
AST_Expression_Real_::AST_Expression_Real_
AST_Expression_Real_(double d)
Definition: expression.cpp:115
AST_Expression_Bracket_::print
string print() const
Definition: expression.cpp:489
AST_Expression_Call_
Definition: expression.hpp:135
AST_Expression_ComponentReference_::prepend
void prepend(AST_String, AST_ExpressionList)
Definition: expression.cpp:302
AST_Expression_ComponentReference_::names
AST_StringList names() const
Definition: expression.cpp:308
AST_Expression_NamedArgument_::_exp
AST_Expression _exp
Definition: expression.hpp:285
AST_Expression_ArrayIndex_::_exp
AST_Expression _exp
Definition: expression.hpp:298
AST_Expression_UMinus_
Definition: expression.hpp:113
AST_Expression_If_ElseIf_::_then
AST_Expression _then
Definition: expression.hpp:245
AST_Expression_BinOp_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:62
AST_Expression_If_::print
string print() const
Definition: expression.cpp:378
AST_Expression_If_::_else_exp
AST_Expression _else_exp
Definition: expression.hpp:219
AST_Expression_Call_::_name
AST_String _name
Definition: expression.hpp:147
AST_Expression_Colon_::print
string print() const
Definition: expression.cpp:449
AST_Expression_Call_::name
AST_String name() const
Definition: expression.cpp:214
AST_Integer
int AST_Integer
Definition: ast_types.hpp:47
AST_Expression_Colon_
Definition: expression.hpp:248
AST_Expression_ArrayIndex_::expression
AST_Expression expression()
Definition: expression.cpp:473
AST_Expression_String_::AST_Expression_String_
AST_Expression_String_(string s)
Definition: expression.cpp:127
AST_Expression_::expressionType
virtual ExpressionType expressionType()
Definition: expression.cpp:52
AST_Expression_ArrayIndex_
Definition: expression.hpp:289
AST_Expression_Derivative_
Definition: expression.hpp:102
AST_Expression_ArrayIndex_::AST_Expression_ArrayIndex_
AST_Expression_ArrayIndex_(AST_Expression exp, int size)
Definition: expression.cpp:467
AST_Expression_End_
Definition: expression.hpp:223
AST_Expression_BooleanNot_::print
string print() const
Definition: expression.cpp:193
AST_Expression_If_ElseIf_
Definition: expression.hpp:235
AST_Expression_ComponentReference_::indexes
AST_ExpressionListList indexes() const
Definition: expression.cpp:322
AST_Expression_Boolean_::value
bool value()
Definition: expression.cpp:146
AST_Expression_ComponentReference_
Definition: expression.hpp:174
AST_Expression_UMinus_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:174
AST_Expression_End_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:391
AST_Expression_Boolean_::print
string print() const
Definition: expression.cpp:148
AST_Expression_ArrayIndex_::_size
int _size
Definition: expression.hpp:299
AST_Expression_If_::then
AST_Expression then() const
Definition: expression.cpp:357
AST_Expression_BinOp_::binopType
BinOpType binopType() const
Definition: expression.cpp:68
AST_Expression_CallArgs_::_args
AST_ExpressionList _args
Definition: expression.hpp:160
AST_Expression_BinOp_::AST_Expression_BinOp_
AST_Expression_BinOp_(AST_Expression e1, AST_Expression e2, BinOpType t)
Definition: expression.cpp:60
AST_Expression_Integer_::print
string print() const
Definition: expression.cpp:106
AST_Expression_String_::str
string str() const
Definition: expression.cpp:138
AST_Expression_Output_::print
string print() const
Definition: expression.cpp:401
AST_Expression_If_ElseIf_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:365
ExpressionType
ExpressionType
Definition: ast_types.hpp:163
AST_Expression_Integer_::val
AST_Integer val()
Definition: expression.cpp:102
AST_Expression_ArrayIndex_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:469
AST_Expression_Range_::_list
AST_ExpressionList _list
Definition: expression.hpp:273
AST_Expression_Derivative_::AST_Expression_Derivative_
AST_Expression_Derivative_(AST_ExpressionList el)
Definition: expression.cpp:157
AST_Expression_BooleanNot_
Definition: expression.hpp:124
AST_Expression_String_::print
string print() const
Definition: expression.cpp:131
AST_String
string * AST_String
Definition: ast_types.hpp:46
AST_Expression_ComponentReference_::cname
const char * cname()
Definition: expression.cpp:310
AST_Expression_Boolean_::_b
bool _b
Definition: expression.hpp:99
AST_Expression_Bracket_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:487
AST_Expression_Bracket_::_ranges
AST_ExpressionList _ranges
Definition: expression.hpp:310
AST_Expression_If_
Definition: expression.hpp:208
AST_Expression_BinOp_::_e2
AST_Expression _e2
Definition: expression.hpp:204
AST_Expression_Derivative_::_el
AST_ExpressionList _el
Definition: expression.hpp:110
AST_Expression_Output_::_list
AST_ExpressionList _list
Definition: expression.hpp:262
AST_Expression_ComponentReference_::_indexes
AST_ExpressionListList _indexes
Definition: expression.hpp:191
AST_Expression_BooleanNot_::exp
AST_Expression exp() const
Definition: expression.cpp:191
AST_Expression_Null_::print
string print() const
Definition: expression.cpp:443
AST_Expression_If_::_elseif_list
AST_ExpressionList _elseif_list
Definition: expression.hpp:220
AST_Expression_NamedArgument_::_name
AST_String _name
Definition: expression.hpp:286
AST_Expression_Bracket_::AST_Expression_Bracket_
AST_Expression_Bracket_(AST_ExpressionList ranges)
Definition: expression.cpp:485
AST_Expression_NamedArgument_::expression
AST_Expression expression()
Definition: expression.cpp:463
AST_Expression_Output_::AST_Expression_Output_
AST_Expression_Output_(AST_ExpressionList)
Definition: expression.cpp:397
AST_Expression_Range_
Definition: expression.hpp:265
AST_Expression_ArrayIndex_::print
string print() const
Definition: expression.cpp:471
AST_Expression_Derivative_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:159
AST_Expression_Call_::_output_args
AST_ExpressionList _output_args
Definition: expression.hpp:149
AST_Expression_End_::print
string print() const
Definition: expression.cpp:393
AST_Expression_UMinus_::_e
AST_Expression _e
Definition: expression.hpp:121
AST_Expression_NamedArgument_::print
string print() const
Definition: expression.cpp:457
AST_Expression_::accept
void accept(AST_Visitor *visitor)
Definition: expression.cpp:56
AST_Expression_::GET_AS
GET_AS(Expression, BinOp)
AST_Expression_Call_::expressionType
virtual ExpressionType expressionType()
Definition: expression.cpp:212
AST_Node_
Definition: ast_node.hpp:29
AST_Expression_BinOp_
Definition: expression.hpp:194
AST_Expression_Brace_::arguments
AST_ExpressionList arguments() const
Definition: expression.cpp:254
AST_Expression_BinOp_::_e1
AST_Expression _e1
Definition: expression.hpp:204
AST_Expression_If_ElseIf_::_cond
AST_Expression _cond
Definition: expression.hpp:244
AST_Expression_ComponentReference_::name
string name()
Definition: expression.cpp:312
AST_Expression_Integer_::_i
AST_Integer _i
Definition: expression.hpp:66
AST_Expression_NamedArgument_
Definition: expression.hpp:276
AST_Expression_Brace_::_args
AST_ExpressionList _args
Definition: expression.hpp:171
AST_Expression_NamedArgument_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:455
AST_Expression_UMinus_::exp
AST_Expression exp() const
Definition: expression.cpp:176
AST_Expression_Real_::_d
double _d
Definition: expression.hpp:74
AST_Expression_BinOp_::_t
BinOpType _t
Definition: expression.hpp:205
AST_Expression_CallArgs_::arguments
AST_ExpressionList arguments() const
Definition: expression.cpp:240
AST_Expression_Range_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:422
AST_Expression_Bracket_::ranges
AST_ExpressionList ranges()
Definition: expression.cpp:491
AST_Expression_If_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:349
AST_Expression_::getAsElseIf
AST_Expression_If_ElseIf getAsElseIf()
Definition: expression.cpp:363
AST_Expression_ArrayIndex_::size
int size()
Definition: expression.cpp:475
AST_Expression_If_::_then
AST_Expression _then
Definition: expression.hpp:219
AST_Expression_Real_
Definition: expression.hpp:69
AST_Expression_Range_::print
string print() const
Definition: expression.cpp:424
AST_Expression_Integer_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:104
AST_Expression_Output_::expressionList
AST_ExpressionList expressionList()
Definition: expression.cpp:416
AST_Expression_BinOp_::print
string print() const
Definition: expression.cpp:70
AST_Expression_Real_::val
double val()
Definition: expression.hpp:74
AST_Expression_If_ElseIf_::condition
AST_Expression condition()
Definition: expression.cpp:367
MicroModelica::Generator::WRITER::Output
@ Output
Definition: writer.hpp:98
AST_Expression_::~AST_Expression_
virtual ~AST_Expression_()
Definition: expression.cpp:32
AST_Expression_String_::_s
string _s
Definition: expression.hpp:88
AST_Expression_Real_::print
string print() const
Definition: expression.cpp:119
AST_Expression_If_::AST_Expression_If_
AST_Expression_If_(AST_Expression cond, AST_Expression then, AST_Expression else_exp, AST_ExpressionList elseif_list)
Definition: expression.cpp:344
AST_Expression_BooleanNot_::AST_Expression_BooleanNot_
AST_Expression_BooleanNot_(AST_Expression e)
Definition: expression.cpp:187
AST_Expression_CallArgs_::print
string print() const
Definition: expression.cpp:242
AST_Expression_Boolean_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:144
AST_Expression_Output_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:399
AST_Expression_Derivative_::print
string print() const
Definition: expression.cpp:163
AST_Expression_Derivative_::arguments
AST_ExpressionList arguments()
Definition: expression.cpp:161
AST_Expression_Call_::AST_Expression_Call_
AST_Expression_Call_(AST_String name, AST_ExpressionList args)
Definition: expression.cpp:202
AST_Expression_ComponentReference_::AST_Expression_ComponentReference_
AST_Expression_ComponentReference_()
Definition: expression.cpp:265
ast_node.hpp
AST_Expression_Real_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:117
AST_Expression_Integer_::AST_Expression_Integer_
AST_Expression_Integer_(AST_Integer i)
Definition: expression.cpp:100
AST_Expression_UMinus_::print
string print() const
Definition: expression.cpp:178
AST_Expression_String_
Definition: expression.hpp:80
AST_Expression_Call_::arguments
AST_ExpressionList arguments() const
Definition: expression.cpp:216
AST_Expression_String_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:129
AST_Expression_If_::_cond
AST_Expression _cond
Definition: expression.hpp:219
AST_Expression_ComponentReference_::hasIndexes
bool hasIndexes() const
Definition: expression.cpp:324
AST_Expression_Output_
Definition: expression.hpp:254
AST_Expression_If_ElseIf_::AST_Expression_If_ElseIf_
AST_Expression_If_ElseIf_(AST_Expression, AST_Expression)
Definition: expression.cpp:361
AST_Expression_CallArgs_::AST_Expression_CallArgs_
AST_Expression_CallArgs_(AST_ExpressionList args)
Definition: expression.cpp:236
AST_Expression_
Definition: expression.hpp:30
AST_Expression_BooleanNot_::_e
AST_Expression _e
Definition: expression.hpp:132
AST_Expression_UMinus_::AST_Expression_UMinus_
AST_Expression_UMinus_(AST_Expression e)
Definition: expression.cpp:172
AST_Expression_If_ElseIf_::print
string print() const
Definition: expression.cpp:371
AST_Expression_If_::elseif_list
AST_ExpressionList elseif_list() const
Definition: expression.cpp:353
ast_types.hpp
AST_Expression_Call_::print
string print() const
Definition: expression.cpp:220
AST_Expression_NamedArgument_::AST_Expression_NamedArgument_
AST_Expression_NamedArgument_(AST_String name, AST_Expression exp)
Definition: expression.cpp:453
AST_Expression_Brace_::print
string print() const
Definition: expression.cpp:256
AST_Expression_BinOp_::left
AST_Expression left() const
Definition: expression.cpp:64
AST_Expression_If_::condition
AST_Expression condition() const
Definition: expression.cpp:355
AST_Expression_Brace_
Definition: expression.hpp:163
AST_Expression_Boolean_::AST_Expression_Boolean_
AST_Expression_Boolean_(bool b)
Definition: expression.cpp:142
BinOpType
BinOpType
Definition: ast_types.hpp:137
AST_Expression_Boolean_
Definition: expression.hpp:91
AST_Visitor
Definition: ast_util.hpp:224
AST_Expression_Range_::expressionList
AST_ExpressionList expressionList()
Definition: expression.cpp:437
AST_Expression_Colon_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:447
AST_Expression_Call_::outputArguments
AST_ExpressionList outputArguments() const
Definition: expression.cpp:218
AST_Expression_Brace_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:252
AST_Expression_Integer_
Definition: expression.hpp:58
MicroModelica::IR::RANGE::If
@ If
Definition: index.hpp:102
AST_Expression_::DEFINE_CLASS_PRINTER
DEFINE_CLASS_PRINTER(AST_Expression)
AST_Expression_Bracket_
Definition: expression.hpp:302
AST_Expression_ComponentReference_::firstIndex
AST_ExpressionList firstIndex()
Definition: expression.cpp:477
AST_Expression_ComponentReference_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:269
AST_Expression_If_::else_exp
AST_Expression else_exp() const
Definition: expression.cpp:351
AST_Expression_CallArgs_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:238
AST_Expression_CallArgs_
Definition: expression.hpp:152
AST_Expression_ComponentReference_::append
void append(AST_String, AST_ExpressionList)
Definition: expression.cpp:296
AST_Expression_NamedArgument_::name
AST_String name()
Definition: expression.cpp:465
AST_Expression_ComponentReference_::_name
AST_StringList _name
Definition: expression.hpp:190
AST_Expression_::print
virtual string print() const =0
AST_Expression_Call_::_args
AST_ExpressionList _args
Definition: expression.hpp:148
AST_Expression_Range_::AST_Expression_Range_
AST_Expression_Range_(AST_ExpressionList)
Definition: expression.cpp:420
AST_Expression_Null_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:441
AST_Expression_If_ElseIf_::then
AST_Expression then()
Definition: expression.cpp:369
AST_Expression_BooleanNot_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:189
AST_Expression_BinOp_::right
AST_Expression right() const
Definition: expression.cpp:66
AST_Expression_ComponentReference_::print
string print() const
Definition: expression.cpp:271
AST_Expression_Null_
Definition: expression.hpp:229