MicroModelicaCCompiler  4.5.3
modification.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 "modification.hpp"
21 
22 #include <list>
23 #include <sstream>
24 
25 #include "../util/ast_util.hpp"
26 #include "expression.hpp"
27 
28 /* Argument Class */
29 
30 AST_Argument_::AST_Argument_() : _final(false), _each(false) {}
31 
32 void AST_Argument_::setFinal() { _final = true; }
33 
34 void AST_Argument_::setEach() { _each = true; }
35 
36 bool AST_Argument_::hasEach() const { return _each; }
37 
38 bool AST_Argument_::isFinal() const { return _final; }
39 
40 void AST_Argument_::accept(AST_Visitor *visitor) { visitor->visit(this); }
41 
42 CLASS_PRINTER_IMP(AST_Argument);
43 GET_AS_IMP(Argument, Modification);
44 
45 /*Modification Class */
46 
48 
50 {
51  visitor->visit(this);
52  visitor->leave(this);
53 }
54 
55 GET_AS_IMP(Modification, Equal);
56 GET_AS_IMP(Modification, Class);
57 GET_AS_IMP(Modification, Assign);
58 CLASS_PRINTER_IMP(AST_Modification);
59 
60 /* Modification Equal Class */
61 
63 
65 {
66  stringstream ret(stringstream::out);
67  ret << " = " << _e;
68  return ret.str();
69 }
70 
71 AST_Expression AST_Modification_Equal_::exp() { return _e; }
72 
74 
75 /* Modification assign Class*/
76 
78 
79 AST_Expression AST_Modification_Assign_::exp() { return _e; }
80 
82 
84 {
85  stringstream ret(stringstream::out);
86  ret << " := " << _e;
87  return ret.str();
88 }
89 
90 /* Modification Class Class */
91 
92 AST_Modification_Class_::AST_Modification_Class_(AST_ArgumentList al, AST_Expression e) : _e(e), _al(al) {}
93 
95 
96 AST_Expression AST_Modification_Class_::exp() const { return _e; }
97 
98 AST_ArgumentList AST_Modification_Class_::arguments() const { return _al; }
99 
100 void AST_Modification_Class_::setArguments(AST_ArgumentList al) { _al = al; }
101 
103 {
104  stringstream ret(stringstream::out);
105  AST_ListPrint(arguments(), ret, "", ",", "(", ")");
106  if (exp()->expressionType() != EXPNULL) {
107  ret << " = " << exp();
108  }
109  return ret.str();
110 }
111 
112 bool AST_Modification_Class_::hasExpression() { return _e != nullptr; }
113 
114 /* Argument modification Class */
115 
116 AST_Argument_Modification_::AST_Argument_Modification_(AST_String name, AST_Modification m) : _name(name), _mod(m) {}
117 
119 {
120  stringstream ret(stringstream::out);
121  if (hasEach()) {
122  ret << "each ";
123  }
124  if (modification() != nullptr) {
125  ret << name() << modification();
126  } else {
127  ret << name();
128  }
129  return ret.str();
130 }
131 
133 
134 AST_Modification AST_Argument_Modification_::modification() const { return _mod; }
135 
137 
139 
140 /* Argument redeclaration Class */
141 
143 
144 string AST_Argument_Redeclaration_::print() const { return ""; }
145 
ModificationType
ModificationType
Definition: ast_types.hpp:189
MODASSIGN
@ MODASSIGN
Definition: ast_types.hpp:189
AST_Modification_Class_::arguments
AST_ArgumentList arguments() const
Definition: modification.cpp:98
AST_Argument_Modification_::print
string print() const
Definition: modification.cpp:118
AST_Modification_Class_::setArguments
void setArguments(AST_ArgumentList al)
Definition: modification.cpp:100
AST_Modification_Assign_::AST_Modification_Assign_
AST_Modification_Assign_(AST_Expression e)
Definition: modification.cpp:77
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_Argument_::_final
bool _final
Definition: modification.hpp:103
AST_Argument_Modification_::_name
AST_String _name
Definition: modification.hpp:128
AST_Argument_Redeclaration_::print
string print() const
Definition: modification.cpp:144
AST_Modification_Equal_::modificationType
virtual ModificationType modificationType()
Definition: modification.cpp:73
AST_Argument_Modification_::AST_Argument_Modification_
AST_Argument_Modification_(AST_String name, AST_Modification m)
Definition: modification.cpp:116
AST_Modification_Assign_::_e
AST_Expression _e
Definition: modification.hpp:243
AST_Modification_Class_::hasExpression
bool hasExpression()
Definition: modification.cpp:112
AST_Argument_Modification_::name
AST_String name() const
Definition: modification.cpp:132
AST_Modification_Class_::_al
AST_ArgumentList _al
Definition: modification.hpp:290
AST_Modification_Class_::exp
AST_Expression exp() const
Definition: modification.cpp:96
AST_Argument_::AST_Argument_
AST_Argument_()
Definition: modification.cpp:30
AST_String
string * AST_String
Definition: ast_types.hpp:46
AST_Argument_Modification_::argumentType
ArgumentType argumentType() const
Definition: modification.cpp:136
AST_Argument_::hasEach
bool hasEach() const
Definition: modification.cpp:36
AST_Modification_Class_::modificationType
virtual ModificationType modificationType()
Definition: modification.cpp:94
GET_AS_IMP
GET_AS_IMP(Argument, Modification)
ArgumentType
ArgumentType
Definition: ast_types.hpp:206
AST_Argument_Redeclaration_::AST_Argument_Redeclaration_
AST_Argument_Redeclaration_()
Definition: modification.cpp:142
AST_Modification_Assign_::modificationType
virtual ModificationType modificationType()
Definition: modification.cpp:81
AST_Argument_::setFinal
void setFinal()
Definition: modification.cpp:32
EXPNULL
@ EXPNULL
Definition: ast_types.hpp:168
AST_Modification_Assign_::print
string print() const
Definition: modification.cpp:83
AST_Modification_Equal_::print
string print() const
Definition: modification.cpp:64
MODEQUAL
@ MODEQUAL
Definition: ast_types.hpp:189
AST_Modification_Class_::_e
AST_Expression _e
Definition: modification.hpp:289
AR_MODIFICATION
@ AR_MODIFICATION
Definition: ast_types.hpp:206
AST_Modification_::modificationType
virtual ModificationType modificationType()
Definition: modification.cpp:47
AST_Argument_::_each
bool _each
Definition: modification.hpp:104
AST_Argument_Modification_::_mod
AST_Modification _mod
Definition: modification.hpp:129
AR_REDECLARATION
@ AR_REDECLARATION
Definition: ast_types.hpp:206
MODNONE
@ MODNONE
Definition: ast_types.hpp:189
AST_Modification_Equal_::_e
AST_Expression _e
Definition: modification.hpp:213
AST_Modification_Class_::print
string print() const
Definition: modification.cpp:102
AST_Argument_::isFinal
bool isFinal() const
Definition: modification.cpp:38
modification.hpp
AST_Visitor::visit
virtual void visit(AST_Class x)=0
AST_Modification_::accept
void accept(AST_Visitor *visitor)
Definition: modification.cpp:49
AST_Modification_Equal_::exp
AST_Expression exp()
Definition: modification.cpp:71
MODCLASS
@ MODCLASS
Definition: ast_types.hpp:189
AST_Argument_Modification_::hasModification
bool hasModification()
Definition: modification.cpp:138
AST_Argument_::accept
void accept(AST_Visitor *visitor)
Definition: modification.cpp:40
AST_Modification_Class_::AST_Modification_Class_
AST_Modification_Class_(AST_ArgumentList al, AST_Expression e)
Definition: modification.cpp:92
AST_Visitor
Definition: ast_util.hpp:224
AST_Argument_Modification_::modification
AST_Modification modification() const
Definition: modification.cpp:134
AST_Modification_Assign_::exp
AST_Expression exp()
Definition: modification.cpp:79
AST_Argument_Redeclaration_::argumentType
ArgumentType argumentType() const
Definition: modification.cpp:146
AST_Argument_::setEach
void setEach()
Definition: modification.cpp:34
AST_Visitor::leave
virtual void leave(AST_Class x)=0
CLASS_PRINTER_IMP
CLASS_PRINTER_IMP(AST_Argument)
AST_Modification_Equal_::AST_Modification_Equal_
AST_Modification_Equal_(AST_Expression e)
Definition: modification.cpp:62
expression.hpp