MicroModelicaCCompiler  4.5.3
equation.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 #pragma once
21 
22 #include <string>
23 
24 #include <ast/ast_node.hpp>
25 #include <ast/ast_types.hpp>
26 #include <ast/element.hpp>
27 #include <util/macros.hpp>
28 #include <util/util_types.hpp>
29 
30 class AST_Equation_ : public AST_Node_ {
31  public:
32  DEFINE_CLASS_PRINTER(AST_Equation);
33  virtual string print() const = 0;
34  virtual EquationType equationType() = 0;
35  void accept(AST_Visitor *visitor);
36  GET_AS(Equation, Call);
37  GET_AS(Equation, Connect);
38  GET_AS(Equation, Equality);
39  GET_AS(Equation, For);
40  GET_AS(Equation, If);
41  GET_AS(Equation, When);
42 };
43 
45  public:
46  AST_Equation_Equality_(AST_Expression left, AST_Expression right, AST_Comment comment);
48  string print() const;
49  AST_Expression left() const;
50  AST_Expression right() const;
51  AST_Comment comment() const;
52  void setLeft(AST_Expression);
53  void setRight(AST_Expression);
54 
55  private:
56  AST_Expression _left, _right;
57  AST_Comment _comment;
58 };
59 
61  public:
62  AST_Equation_Connect_(AST_Expression_ComponentReference cr1, AST_Expression_ComponentReference cr2);
63  string print() const;
64  AST_Expression_ComponentReference left();
65  AST_Expression_ComponentReference right();
66  virtual EquationType equationType();
67 
68  private:
69  AST_Expression_ComponentReference _cr1, _cr2;
70 };
71 
73  public:
74  AST_Equation_Call_(AST_Expression e);
75  string print() const;
76  virtual EquationType equationType();
77  AST_Expression call() const;
78 
79  private:
80  AST_Expression _call;
81 };
82 
84  public:
85  AST_Equation_If_(AST_Expression cond, AST_EquationList eql, AST_Equation_ElseList elseif, AST_EquationList else_eq);
86  string print() const;
87  AST_Expression condition() const;
88  void setCondition(AST_Expression c);
89  AST_EquationList equationList() const;
90  AST_EquationList equationElseList() const;
91  AST_Equation_ElseList equationElseIf() const;
93 
94  private:
95  AST_Expression _cond;
96  AST_EquationList _eql;
97  AST_EquationList _else;
98  AST_Equation_ElseList _else_if;
99 };
100 
102  public:
103  AST_Equation_For_(AST_ForIndexList ind, AST_EquationList eql);
104  string print() const;
105  AST_EquationList equationList() const;
106  AST_ForIndexList forIndexList() const;
108 
109  private:
110  AST_EquationList _eql;
111  AST_ForIndexList _ind;
112 };
113 
114 class AST_ForIndex_ : public AST_Node_ {
115  public:
116  AST_ForIndex_(AST_String var, AST_Expression exp);
117  DEFINE_CLASS_PRINTER(AST_ForIndex);
118  string print() const;
119  AST_String variable() const;
120  AST_Expression in_exp() const;
121  void accept(AST_Visitor *visitor);
122 
123  private:
125  AST_Expression _in;
126 };
127 
129  public:
130  AST_Equation_Else_(AST_Expression cond, AST_EquationList eqs);
131  AST_Expression condition() const;
132  void setCondition(AST_Expression e);
133  AST_EquationList equations() const;
134  void accept(AST_Visitor *visitor);
135 
136  private:
137  AST_Expression _cond;
138  AST_EquationList _eqs;
139 };
140 
142  public:
143  AST_Equation_When_(AST_Expression cond, AST_EquationList eql, AST_Equation_ElseList elsewhen, AST_Comment c);
144  string print() const;
145  AST_Expression condition() const;
146  AST_EquationList equationList() const;
148  AST_Equation_ElseList equationElseWhen() const;
149  void setCondition(AST_Expression e);
150  AST_Comment comment() const;
151  bool hasComment();
152 
153  private:
154  AST_Expression _cond;
155  AST_EquationList _eql;
156  AST_Equation_ElseList _else_when;
157  AST_Comment _comment;
158 };
AST_Equation_::equationType
virtual EquationType equationType()=0
AST_Equation_When_::comment
AST_Comment comment() const
Definition: equation.cpp:226
AST_Equation_Equality_::comment
AST_Comment comment() const
Definition: equation.cpp:59
AST_Equation_If_::condition
AST_Expression condition() const
Definition: equation.cpp:109
AST_ForIndex_::accept
void accept(AST_Visitor *visitor)
Definition: equation.cpp:203
AST_Equation_::accept
void accept(AST_Visitor *visitor)
Definition: equation.cpp:32
AST_Equation_If_::_cond
AST_Expression _cond
Definition: equation.hpp:95
AST_Equation_Equality_::setLeft
void setLeft(AST_Expression)
Definition: equation.cpp:44
AST_ForIndex_
Definition: equation.hpp:114
AST_Equation_When_::equationType
EquationType equationType()
Definition: equation.cpp:220
AST_Equation_Call_
Definition: equation.hpp:72
AST_Equation_If_::equationType
EquationType equationType()
Definition: equation.cpp:119
macros.hpp
AST_Equation_Connect_::_cr2
AST_Expression_ComponentReference _cr2
Definition: equation.hpp:69
AST_Equation_For_
Definition: equation.hpp:101
AST_Equation_Equality_::_right
AST_Expression _right
Definition: equation.hpp:56
AST_Equation_When_::equationList
AST_EquationList equationList() const
Definition: equation.cpp:218
AST_Equation_If_::equationElseIf
AST_Equation_ElseList equationElseIf() const
Definition: equation.cpp:117
AST_Equation_For_::equationType
EquationType equationType()
Definition: equation.cpp:180
AST_Equation_Connect_::AST_Equation_Connect_
AST_Equation_Connect_(AST_Expression_ComponentReference cr1, AST_Expression_ComponentReference cr2)
Definition: equation.cpp:65
AST_Equation_Call_::_call
AST_Expression _call
Definition: equation.hpp:80
element.hpp
AST_ForIndex_::AST_ForIndex_
AST_ForIndex_(AST_String var, AST_Expression exp)
Definition: equation.cpp:184
AST_Equation_Call_::AST_Equation_Call_
AST_Equation_Call_(AST_Expression e)
Definition: equation.cpp:86
AST_Equation_Equality_::equationType
EquationType equationType()
Definition: equation.cpp:57
AST_ForIndex_::DEFINE_CLASS_PRINTER
DEFINE_CLASS_PRINTER(AST_ForIndex)
AST_String
string * AST_String
Definition: ast_types.hpp:46
AST_Equation_Call_::call
AST_Expression call() const
Definition: equation.cpp:88
AST_Equation_For_::_eql
AST_EquationList _eql
Definition: equation.hpp:110
AST_Equation_If_::AST_Equation_If_
AST_Equation_If_(AST_Expression cond, AST_EquationList eql, AST_Equation_ElseList elseif, AST_EquationList else_eq)
Definition: equation.cpp:104
AST_Equation_If_::print
string print() const
Definition: equation.cpp:121
AST_Equation_If_::equationElseList
AST_EquationList equationElseList() const
Definition: equation.cpp:115
AST_Equation_Else_
Definition: equation.hpp:128
AST_Equation_Equality_::setRight
void setRight(AST_Expression)
Definition: equation.cpp:46
AST_Equation_Else_::AST_Equation_Else_
AST_Equation_Else_(AST_Expression cond, AST_EquationList eqs)
Definition: equation.cpp:260
AST_Equation_Connect_::_cr1
AST_Expression_ComponentReference _cr1
Definition: equation.hpp:69
AST_Equation_For_::forIndexList
AST_ForIndexList forIndexList() const
Definition: equation.cpp:178
AST_ForIndex_::print
string print() const
AST_Equation_Else_::setCondition
void setCondition(AST_Expression e)
Definition: equation.cpp:264
AST_Equation_If_::setCondition
void setCondition(AST_Expression c)
Definition: equation.cpp:111
AST_Equation_Else_::condition
AST_Expression condition() const
Definition: equation.cpp:262
AST_Equation_Call_::print
string print() const
Definition: equation.cpp:90
AST_Equation_Connect_::right
AST_Expression_ComponentReference right()
Definition: equation.cpp:80
util_types.hpp
AST_Node_
Definition: ast_node.hpp:29
AST_Equation_When_::_eql
AST_EquationList _eql
Definition: equation.hpp:155
AST_Equation_If_::_else_if
AST_Equation_ElseList _else_if
Definition: equation.hpp:98
AST_Equation_When_::print
string print() const
Definition: equation.cpp:230
AST_Equation_For_::equationList
AST_EquationList equationList() const
Definition: equation.cpp:176
AST_Equation_Equality_::_left
AST_Expression _left
Definition: equation.hpp:56
AST_Equation_For_::_ind
AST_ForIndexList _ind
Definition: equation.hpp:111
AST_Equation_Else_::equations
AST_EquationList equations() const
Definition: equation.cpp:266
AST_Equation_When_::setCondition
void setCondition(AST_Expression e)
Definition: equation.cpp:224
AST_Equation_Else_::_cond
AST_Expression _cond
Definition: equation.hpp:137
AST_Equation_When_::equationElseWhen
AST_Equation_ElseList equationElseWhen() const
Definition: equation.cpp:222
AST_Equation_When_::AST_Equation_When_
AST_Equation_When_(AST_Expression cond, AST_EquationList eql, AST_Equation_ElseList elsewhen, AST_Comment c)
Definition: equation.cpp:211
AST_Equation_Else_::accept
void accept(AST_Visitor *visitor)
Definition: equation.cpp:268
AST_ForIndex_::variable
AST_String variable() const
Definition: equation.cpp:186
AST_Equation_When_::_else_when
AST_Equation_ElseList _else_when
Definition: equation.hpp:156
AST_Equation_If_::_else
AST_EquationList _else
Definition: equation.hpp:97
AST_Equation_When_::hasComment
bool hasComment()
Definition: equation.cpp:228
AST_Equation_Connect_::equationType
virtual EquationType equationType()
Definition: equation.cpp:82
AST_Equation_Equality_
Definition: equation.hpp:44
AST_Equation_If_
Definition: equation.hpp:83
AST_Equation_Equality_::right
AST_Expression right() const
Definition: equation.cpp:55
AST_Equation_Equality_::print
string print() const
Definition: equation.cpp:36
AST_Equation_::print
virtual string print() const =0
AST_ForIndex_::_in
AST_Expression _in
Definition: equation.hpp:125
ast_node.hpp
AST_Equation_::GET_AS
GET_AS(Equation, Call)
AST_Equation_If_::equationList
AST_EquationList equationList() const
Definition: equation.cpp:113
AST_Equation_When_::_comment
AST_Comment _comment
Definition: equation.hpp:157
MicroModelica::IR::RANGE::For
@ For
Definition: index.hpp:102
AST_Equation_For_::AST_Equation_For_
AST_Equation_For_(AST_ForIndexList ind, AST_EquationList eql)
Definition: equation.cpp:157
AST_Equation_When_::condition
AST_Expression condition() const
Definition: equation.cpp:216
AST_Equation_::DEFINE_CLASS_PRINTER
DEFINE_CLASS_PRINTER(AST_Equation)
ast_types.hpp
AST_Equation_Connect_
Definition: equation.hpp:60
AST_Equation_Call_::equationType
virtual EquationType equationType()
Definition: equation.cpp:98
AST_Equation_If_::_eql
AST_EquationList _eql
Definition: equation.hpp:96
EquationType
EquationType
Definition: ast_types.hpp:161
AST_ForIndex_::in_exp
AST_Expression in_exp() const
Definition: equation.cpp:188
AST_Visitor
Definition: ast_util.hpp:224
AST_Equation_Equality_::AST_Equation_Equality_
AST_Equation_Equality_(AST_Expression left, AST_Expression right, AST_Comment comment)
Definition: equation.cpp:48
MicroModelica::IR::RANGE::If
@ If
Definition: index.hpp:102
AST_Equation_When_
Definition: equation.hpp:141
AST_Equation_When_::_cond
AST_Expression _cond
Definition: equation.hpp:154
AST_Equation_Equality_::left
AST_Expression left() const
Definition: equation.cpp:53
AST_ForIndex_::_var
AST_String _var
Definition: equation.hpp:124
AST_Equation_
Definition: equation.hpp:30
AST_Equation_Connect_::left
AST_Expression_ComponentReference left()
Definition: equation.cpp:78
AST_Equation_Else_::_eqs
AST_EquationList _eqs
Definition: equation.hpp:138
AST_Equation_Equality_::_comment
AST_Comment _comment
Definition: equation.hpp:57
AST_Equation_Connect_::print
string print() const
Definition: equation.cpp:70
AST_Equation_For_::print
string print() const
Definition: equation.cpp:159