MicroModelicaCCompiler  4.5.3
expression.cpp
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 #include "expression.hpp"
21 
22 #include <list>
23 #include <sstream>
24 
25 #include "../util/ast_util.hpp"
26 #include "ast_builder.hpp"
27 
28 const char *BinOpTypeName[] = {" or ", " and ", "<", "<=", ">", ">=", "<>", "==", "+", ".+", "-", ".-", "/", "./", "*", ".*", "^", ".^"};
29 
30 /* Expression Class */
31 
33 
34 GET_AS_IMP(Expression, BinOp);
35 GET_AS_IMP(Expression, Boolean);
36 GET_AS_IMP(Expression, BooleanNot);
37 GET_AS_IMP(Expression, Brace);
38 GET_AS_IMP(Expression, Call);
39 GET_AS_IMP(Expression, CallArgs);
40 GET_AS_IMP(Expression, ComponentReference);
41 GET_AS_IMP(Expression, NamedArgument);
42 GET_AS_IMP(Expression, Derivative);
43 GET_AS_IMP(Expression, If);
44 GET_AS_IMP(Expression, Integer);
45 GET_AS_IMP(Expression, Output);
46 GET_AS_IMP(Expression, Range);
47 GET_AS_IMP(Expression, Real);
48 GET_AS_IMP(Expression, UMinus);
49 GET_AS_IMP(Expression, String);
50 GET_AS_IMP(Expression, Bracket);
51 
53 
54 CLASS_PRINTER_IMP(AST_Expression);
55 
56 void AST_Expression_::accept(AST_Visitor *visitor) { visitor->visit(this); }
57 
58 /* Binary operation Class */
59 
60 AST_Expression_BinOp_::AST_Expression_BinOp_(AST_Expression e1, AST_Expression e2, BinOpType t) : _e1(e1), _e2(e2), _t(t) {}
61 
63 
64 AST_Expression AST_Expression_BinOp_::left() const { return _e1; }
65 
66 AST_Expression AST_Expression_BinOp_::right() const { return _e2; }
67 
69 
71 {
72  stringstream ret(stringstream::out);
73  /* Print parenthesis */
74  if (left()->expressionType() == EXPBINOP) {
75  AST_Expression_BinOp b = left()->getAsBinOp();
76  if (b->binopType() < binopType()) { // Parenthesis needed for left op
77  ret << "(" << left() << ")";
78  } else {
79  ret << left();
80  }
81  } else {
82  ret << left();
83  }
84  ret << BinOpTypeName[binopType()];
85  if (right()->expressionType() == EXPBINOP) {
86  AST_Expression_BinOp b = right()->getAsBinOp();
87  if (b->binopType() < binopType()) { // Parenthesis needed for left op
88  ret << "(" << right() << ")";
89  } else {
90  ret << right();
91  }
92  } else {
93  ret << right();
94  }
95  return ret.str();
96 }
97 
98 /* Integer Class */
99 
101 
103 
105 
107 {
108  stringstream ret(stringstream::out);
109  ret << _i;
110  return ret.str();
111 }
112 
113 /* Real Class */
114 
116 
118 
120 {
121  stringstream ret(stringstream::out);
122  ret << _d;
123  return ret.str();
124 }
125 
126 /* String Class */
128 
130 
132 {
133  stringstream ret(stringstream::out);
134  ret << "\"" << _s << "\"";
135  return ret.str();
136 }
137 
138 string AST_Expression_String_::str() const { return _s; }
139 
140 /* Boolean Class*/
141 
143 
145 
147 
149 {
150  stringstream ret(stringstream::out);
151  ret << (_b ? "true" : "false");
152  return ret.str();
153 }
154 
155 /* Derivative Class */
156 
158 
160 
161 AST_ExpressionList AST_Expression_Derivative_::arguments() { return _el; }
162 
164 {
165  stringstream ret(stringstream::out);
166  ret << "der(" << *_el->front() << ")";
167  return ret.str();
168 }
169 
170 /* Unary minus Class */
171 
173 
175 
176 AST_Expression AST_Expression_UMinus_::exp() const { return _e; }
177 
179 {
180  stringstream ret(stringstream::out);
181  ret << "(-" << _e << ")";
182  return ret.str();
183 }
184 
185 /* Boolean not Class */
186 
188 
190 
191 AST_Expression AST_Expression_BooleanNot_::exp() const { return _e; }
192 
194 {
195  stringstream ret(stringstream::out);
196  ret << "not " << exp();
197  return ret.str();
198 }
199 
200 /* Function call Class */
201 
203  : _name(name), _args(args), _output_args(newAST_ExpressionList())
204 {
205 }
206 
207 AST_Expression_Call_::AST_Expression_Call_(AST_String name, AST_ExpressionList args, AST_ExpressionList output_args)
208  : _name(name), _args(args), _output_args(output_args)
209 {
210 }
211 
213 
215 
216 AST_ExpressionList AST_Expression_Call_::arguments() const { return _args; }
217 
218 AST_ExpressionList AST_Expression_Call_::outputArguments() const { return _output_args; }
219 
221 {
222  stringstream ret;
223  AST_ExpressionListIterator it;
224  ret << name() << "(";
225  int size = arguments()->size(), i = 0;
226  foreach (it, arguments()) {
227  i++;
228  ret << current_element(it);
229  ret << (i < size ? "," : "");
230  }
231  ret << ")";
232  return ret.str();
233 }
234 
235 /* Call arguments Class */
236 AST_Expression_CallArgs_::AST_Expression_CallArgs_(AST_ExpressionList args) : _args(args) {}
237 
239 
240 AST_ExpressionList AST_Expression_CallArgs_::arguments() const { return _args; }
241 
243 {
244  stringstream ret(stringstream::out);
245  ret << "";
246  return ret.str();
247 }
248 
249 /* Brace expression Class */
250 AST_Expression_Brace_::AST_Expression_Brace_(AST_ExpressionList args) : _args(args) {}
251 
253 
254 AST_ExpressionList AST_Expression_Brace_::arguments() const { return _args; }
255 
257 {
258  stringstream ret(stringstream::out);
259  AST_ListPrint(arguments(), ret, "", ",", "{", "}");
260  return ret.str();
261 }
262 
263 /* Component Reference Class */
264 
266 {
267 }
268 
270 
272 {
273  stringstream ret;
274  AST_StringListIterator it;
275  AST_ExpressionListListIterator exp_it = indexes()->begin();
276  AST_ExpressionListIterator exp_it2;
277  int size = names()->size(), i = 0;
278  foreach (it, names()) {
279  i++;
280  ret << *current_element(it);
281  if (current_element(exp_it)->size()) {
282  ret << "[";
283  int size2 = current_element(exp_it)->size(), i2 = 0;
284  foreach (exp_it2, current_element(exp_it))
285  ret << current_element(exp_it2)->print() << (++i2 < size2 ? "," : "");
286  ret << "]";
287  }
288  ret << (i < size ? "." : "");
289  exp_it++;
290  }
291  return ret.str();
292 }
293 
294 CLASSP_PRINTER_IMP(AST_Expression_ComponentReference);
295 
297 {
298  AST_ListAppend(names(), s);
299  AST_ListAppend(indexes(), subs);
300 }
301 
303 {
304  AST_ListPrepend(names(), s);
305  AST_ListAppend(indexes(), subs);
306 }
307 
308 AST_StringList AST_Expression_ComponentReference_::names() const { return _name; }
309 
310 const char *AST_Expression_ComponentReference_::cname() { return name().c_str(); }
311 
313 {
314  stringstream ret;
315  AST_StringListIterator it;
316  foreach (it, names()) {
317  ret << current_element(it)->c_str();
318  }
319  return ret.str();
320 }
321 
322 AST_ExpressionListList AST_Expression_ComponentReference_::indexes() const { return _indexes; }
323 
325 {
326  if (_indexes->empty()) {
327  return false;
328  }
329  AST_ExpressionListListIterator it;
330  foreach (it, _indexes) {
331  AST_ExpressionList el = current_element(it);
332  AST_ExpressionListIterator elit;
333  foreach (elit, el) {
334  if (current_element(elit) != nullptr) {
335  return true;
336  }
337  }
338  }
339  return false;
340 }
341 
342 /* If expression Class */
343 
344 AST_Expression_If_::AST_Expression_If_(AST_Expression cond, AST_Expression then, AST_Expression else_exp, AST_ExpressionList elseif_list)
345  : _cond(cond), _then(then), _else_exp(else_exp), _elseif_list(elseif_list)
346 {
347 }
348 
350 
351 AST_Expression AST_Expression_If_::else_exp() const { return _else_exp; }
352 
353 AST_ExpressionList AST_Expression_If_::elseif_list() const { return _elseif_list; }
354 
355 AST_Expression AST_Expression_If_::condition() const { return _cond; }
356 
357 AST_Expression AST_Expression_If_::then() const { return _then; }
358 
359 /* Else if expression Class */
360 
361 AST_Expression_If_ElseIf_::AST_Expression_If_ElseIf_(AST_Expression c, AST_Expression t) : _cond(c), _then(t) {}
362 
363 AST_Expression_If_ElseIf AST_Expression_::getAsElseIf() { return dynamic_cast<AST_Expression_If_ElseIf>(this); }
364 
366 
367 AST_Expression AST_Expression_If_ElseIf_::condition() { return _cond; }
368 
369 AST_Expression AST_Expression_If_ElseIf_::then() { return _then; }
370 
372 {
373  stringstream ret;
374  ret << " elseif " << _cond << " then " << _then;
375  return ret.str();
376 }
377 
379 {
380  stringstream ret;
381  AST_ExpressionListIterator it;
382  ret << "if " << condition() << " then " << then();
383  if (!elseif_list()->empty()) foreach (it, elseif_list())
384  ret << current_element(it)->getAsElseIf();
385  ret << " else " << else_exp();
386  return ret.str();
387 }
388 
389 /* End for subscripts Class */
390 
392 
393 string AST_Expression_End_::print() const { return "end"; }
394 
395 /* Output expression Class */
396 
397 AST_Expression_Output_::AST_Expression_Output_(AST_ExpressionList l) : _list(l) {}
398 
400 
402 {
403  AST_ExpressionListIterator it;
404  stringstream ret;
405  ret << "(";
406  int size = _list->size(), i = 0;
407  foreach (it, _list) {
408  i++;
409  ret << current_element(it);
410  ret << (i == size ? "" : ",");
411  }
412  ret << ")";
413  return ret.str();
414 }
415 
416 AST_ExpressionList AST_Expression_Output_::expressionList() { return _list; }
417 
418 /* Range expression Class */
419 
420 AST_Expression_Range_::AST_Expression_Range_(AST_ExpressionList l) : _list(l) {}
421 
423 
425 {
426  AST_ExpressionListIterator it;
427  stringstream ret;
428  int size = _list->size(), i = 0;
429  foreach (it, _list) {
430  i++;
431  ret << current_element(it);
432  ret << (i == size ? "" : ":");
433  }
434  return ret.str();
435 }
436 
437 AST_ExpressionList AST_Expression_Range_::expressionList() { return _list; }
438 
439 /* Null Expression Class */
440 
442 
443 string AST_Expression_Null_::print() const { return "NULLEXP!!!"; }
444 
445 /* Colon expression Class */
446 
448 
449 string AST_Expression_Colon_::print() const { return ":"; }
450 
451 /* Named Argument expression Class */
452 
453 AST_Expression_NamedArgument_::AST_Expression_NamedArgument_(AST_String name, AST_Expression exp) : _exp(exp), _name(name) {}
454 
456 
458 {
459  stringstream ret;
460  return ret.str();
461 }
462 
464 
466 
467 AST_Expression_ArrayIndex_::AST_Expression_ArrayIndex_(AST_Expression exp, int size) : _exp(exp), _size(size) {}
468 
470 
471 string AST_Expression_ArrayIndex_::print() const { return ""; }
472 
473 AST_Expression AST_Expression_ArrayIndex_::expression() { return _exp; }
474 
476 
478 {
479  if (_indexes->empty()) {
480  return newAST_ExpressionList();
481  }
482  return AST_ListFirst(_indexes);
483 }
484 
485 AST_Expression_Bracket_::AST_Expression_Bracket_(AST_ExpressionList ranges) : _ranges(ranges) {}
486 
488 
489 string AST_Expression_Bracket_::print() const { return "Not implemented"; };
490 
491 AST_ExpressionList AST_Expression_Bracket_::ranges() { return _ranges; }
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
EXPINTEGER
@ EXPINTEGER
Definition: ast_types.hpp:180
EXPOUTPUT
@ EXPOUTPUT
Definition: ast_types.hpp:182
GET_AS_IMP
GET_AS_IMP(Expression, BinOp)
AST_Expression_ComponentReference_::prepend
void prepend(AST_String, AST_ExpressionList)
Definition: expression.cpp:302
ast_builder.hpp
AST_Expression_ComponentReference_::names
AST_StringList names() const
Definition: expression.cpp:308
AST_Expression_NamedArgument_::_exp
AST_Expression _exp
Definition: expression.hpp:285
EXPCOMPREF
@ EXPCOMPREF
Definition: ast_types.hpp:165
AST_Expression_ArrayIndex_::_exp
AST_Expression _exp
Definition: expression.hpp:298
AST_ListPrint
void AST_ListPrint(list< T1 > *l1, ostream &ret, string sec_name="", string separator=" ", string opener="", string closer="", bool block=false)
Definition: ast_types.hpp:319
AST_Expression_If_ElseIf_::_then
AST_Expression _then
Definition: expression.hpp:245
AST_Expression_BinOp_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:62
AST_ListPrepend
list< T1 > * AST_ListPrepend(list< T1 > *l, T1 e)
Definition: ast_types.hpp:247
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
EXPUMINUS
@ EXPUMINUS
Definition: ast_types.hpp:176
AST_Integer
int AST_Integer
Definition: ast_types.hpp:47
EXPELSEIF
@ EXPELSEIF
Definition: ast_types.hpp:174
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_::AST_Expression_ArrayIndex_
AST_Expression_ArrayIndex_(AST_Expression exp, int size)
Definition: expression.cpp:467
AST_Expression_BooleanNot_::print
string print() const
Definition: expression.cpp:193
AST_Expression_ComponentReference_::indexes
AST_ExpressionListList indexes() const
Definition: expression.cpp:322
AST_Expression_Boolean_::value
bool value()
Definition: expression.cpp:146
EXPCALLARG
@ EXPCALLARG
Definition: ast_types.hpp:171
AST_Expression_UMinus_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:174
AST_Expression_End_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:391
EXPARRAYINDEX
@ EXPARRAYINDEX
Definition: ast_types.hpp:185
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
EXPIF
@ EXPIF
Definition: ast_types.hpp:170
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
CLASSP_PRINTER_IMP
CLASSP_PRINTER_IMP(AST_Expression_ComponentReference)
EXPRANGE
@ EXPRANGE
Definition: ast_types.hpp:183
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
newAST_StringList
AST_StringList newAST_StringList()
Definition: ast_builder.cpp:315
AST_Expression_Bracket_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:487
AST_Expression_Bracket_::_ranges
AST_ExpressionList _ranges
Definition: expression.hpp:310
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
EXPDERIVATIVE
@ EXPDERIVATIVE
Definition: ast_types.hpp:167
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
EXPBOOLEAN
@ EXPBOOLEAN
Definition: ast_types.hpp:177
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_Call_::expressionType
virtual ExpressionType expressionType()
Definition: expression.cpp:212
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
newAST_ExpressionListList
AST_ExpressionListList newAST_ExpressionListList()
Definition: ast_builder.cpp:497
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_ListAppend
list< T1 > * AST_ListAppend(list< T1 > *l, T1 e)
Definition: ast_types.hpp:240
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_Range_::print
string print() const
Definition: expression.cpp:424
AST_Expression_Integer_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:104
EXPCALL
@ EXPCALL
Definition: ast_types.hpp:173
AST_Expression_Output_::expressionList
AST_ExpressionList expressionList()
Definition: expression.cpp:416
BinOpTypeName
const char * BinOpTypeName[]
Definition: expression.cpp:28
AST_Expression_BinOp_::print
string print() const
Definition: expression.cpp:70
AST_Expression_If_ElseIf_::condition
AST_Expression condition()
Definition: expression.cpp:367
MicroModelica::Generator::WRITER::Output
@ Output
Definition: writer.hpp:98
EXPNULL
@ EXPNULL
Definition: ast_types.hpp:168
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_ListFirst
T1 AST_ListFirst(list< T1 > *l)
Definition: ast_types.hpp:271
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
EXPBOOLEANNOT
@ EXPBOOLEANNOT
Definition: ast_types.hpp:181
AST_Expression_ComponentReference_::AST_Expression_ComponentReference_
AST_Expression_ComponentReference_()
Definition: expression.cpp:265
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
EXPNONE
@ EXPNONE
Definition: ast_types.hpp:164
AST_Expression_UMinus_::print
string print() const
Definition: expression.cpp:178
AST_Expression_Call_::arguments
AST_ExpressionList arguments() const
Definition: expression.cpp:216
EXPBRACKET
@ EXPBRACKET
Definition: ast_types.hpp:186
AST_Visitor::visit
virtual void visit(AST_Class x)=0
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
EXPNAMEDARGUMENT
@ EXPNAMEDARGUMENT
Definition: ast_types.hpp:184
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_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
EXPBINOP
@ EXPBINOP
Definition: ast_types.hpp:166
AST_Expression_If_::elseif_list
AST_ExpressionList elseif_list() const
Definition: expression.cpp:353
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_Boolean_::AST_Expression_Boolean_
AST_Expression_Boolean_(bool b)
Definition: expression.cpp:142
BinOpType
BinOpType
Definition: ast_types.hpp:137
EXPCOLON
@ EXPCOLON
Definition: ast_types.hpp:175
CLASS_PRINTER_IMP
CLASS_PRINTER_IMP(AST_Expression)
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
EXPREAL
@ EXPREAL
Definition: ast_types.hpp:179
AST_Expression_Call_::outputArguments
AST_ExpressionList outputArguments() const
Definition: expression.cpp:218
AST_Expression_Brace_::expressionType
ExpressionType expressionType()
Definition: expression.cpp:252
newAST_ExpressionList
AST_ExpressionList newAST_ExpressionList(AST_Expression e)
Definition: ast_builder.cpp:132
MicroModelica::IR::RANGE::If
@ If
Definition: index.hpp:102
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
EXPBRACE
@ EXPBRACE
Definition: ast_types.hpp:172
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
current_element
#define current_element(it)
Definition: ast_types.hpp:34
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
EXPEND
@ EXPEND
Definition: ast_types.hpp:169
EXPSTRING
@ EXPSTRING
Definition: ast_types.hpp:178
AST_Expression_BinOp_::right
AST_Expression right() const
Definition: expression.cpp:66
expression.hpp
AST_Expression_ComponentReference_::print
string print() const
Definition: expression.cpp:271