libutap
statement.h
Go to the documentation of this file.
1 // -*- mode: C++; c-file-style: "stroustrup"; c-basic-offset: 4; indent-tabs-mode: nil; -*-
2 
3 /* libutap - Uppaal Timed Automata Parser.
4  Copyright (C) 2002 Uppsala University and Aalborg University.
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public License
8  as published by the Free Software Foundation; either version 2.1 of
9  the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful, but
12  WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public
17  License along with this library; if not, write to the Free Software
18  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19  USA
20 */
21 
22 #ifndef UTAP_STATEMENT_H
23 #define UTAP_STATEMENT_H
24 
25 #define INDENT " "
26 
27 #include "utap/expression.h"
28 #include "utap/symbols.h"
29 #include "utap/system.h"
30 
31 namespace UTAP
32 {
33  class StatementVisitor;
34 
35  class Statement
36  {
37  public:
38  virtual ~Statement() {};
39  virtual int32_t accept(StatementVisitor *visitor) = 0;
40  virtual bool returns() = 0;
41  virtual std::string toString(std::string prefix) const = 0;
42  protected:
43  Statement();
44  };
45 
46  class EmptyStatement: public Statement
47  {
48  public:
50  virtual int32_t accept(StatementVisitor *visitor);
51  virtual bool returns();
52  std::string toString(std::string prefix) const;
53  };
54 
55  class ExprStatement: public Statement
56  {
57  public:
60  virtual int32_t accept(StatementVisitor *visitor);
61  virtual bool returns();
62  std::string toString(std::string prefix) const;
63  };
64 
65  class AssertStatement: public Statement
66  {
67  public:
70  virtual int32_t accept(StatementVisitor *visitor);
71  virtual bool returns();
72  std::string toString(std::string prefix) const;
73  };
74 
75  class ForStatement: public Statement
76  {
77  public:
83  virtual int32_t accept(StatementVisitor *visitor);
84  virtual bool returns();
85  std::string toString(std::string prefix) const;
86  };
87 
92  {
93  protected:
95  public:
99  frame_t getFrame() { return frame; }
100  virtual int32_t accept(StatementVisitor *visitor);
101  virtual bool returns();
102  std::string toString(std::string prefix) const;
103  };
104 
105  class WhileStatement: public Statement
106  {
107  public:
111  virtual int32_t accept(StatementVisitor *visitor);
112  virtual bool returns();
113  std::string toString(std::string prefix) const;
114  };
115 
117  {
118  public:
122  virtual int32_t accept(StatementVisitor *visitor);
123  virtual bool returns();
124  std::string toString(std::string prefix) const;
125  };
126 
127  class BlockStatement: public Statement, public declarations_t
128  {
129  public:
130  typedef std::vector<Statement *>::const_iterator const_iterator;
131  typedef std::vector<Statement *>::iterator iterator;
132  protected:
133  std::vector<Statement*> stats;
135  public:
137  virtual ~BlockStatement();
138  virtual int32_t accept(StatementVisitor *visitor);
139  virtual bool returns();
140 
141  frame_t getFrame() { return frame; }
142  void push_stat(Statement* stat);
143  Statement* pop_stat();
144  Statement* back();
145  const_iterator begin() const;
146  const_iterator end() const;
147  iterator begin();
148  iterator end();
149  std::string toString(std::string prefix) const;
150  };
151 
153  {
154  public:
157  virtual int32_t accept(StatementVisitor *visitor);
158  virtual bool returns();
159  std::string toString(std::string prefix) const;
160  };
161 
163  {
164  public:
167  virtual int32_t accept(StatementVisitor *visitor);
168  virtual bool returns();
169  std::string toString(std::string prefix) const;
170  };
171 
173  {
174  public:
176  virtual int32_t accept(StatementVisitor *visitor);
177  virtual bool returns();
178  };
179 
180  class IfStatement: public Statement
181  {
182  public:
187  Statement* falseStat=NULL);
188  virtual int32_t accept(StatementVisitor *visitor);
189  virtual bool returns();
190  std::string toString(std::string prefix) const;
191  };
192 
193  class BreakStatement: public Statement
194  {
195  public:
196  BreakStatement();
197  virtual int32_t accept(StatementVisitor *visitor);
198  virtual bool returns();
199  std::string toString(std::string prefix) const;
200  };
201 
203  {
204  public:
206  virtual int32_t accept(StatementVisitor *visitor);
207  virtual bool returns();
208  std::string toString(std::string prefix) const;
209  };
210 
212  {
213  public:
215  ReturnStatement();
217  virtual int32_t accept(StatementVisitor *visitor);
218  virtual bool returns();
219  std::string toString(std::string prefix) const;
220  };
221 
223  {
224  public:
225  virtual ~StatementVisitor() {};
226  virtual int32_t visitEmptyStatement(EmptyStatement *stat)=0;
227  virtual int32_t visitExprStatement(ExprStatement *stat)=0;
228  virtual int32_t visitAssertStatement(AssertStatement *stat)=0;
229  virtual int32_t visitForStatement(ForStatement *stat)=0;
230  virtual int32_t visitIterationStatement(IterationStatement *stat)=0;
231  virtual int32_t visitWhileStatement(WhileStatement *stat)=0;
232  virtual int32_t visitDoWhileStatement(DoWhileStatement *stat)=0;
233  virtual int32_t visitBlockStatement(BlockStatement *stat)=0;
234  virtual int32_t visitSwitchStatement(SwitchStatement *stat)=0;
235  virtual int32_t visitCaseStatement(CaseStatement *stat)=0;
236  virtual int32_t visitDefaultStatement(DefaultStatement *stat)=0;
237  virtual int32_t visitIfStatement(IfStatement *stat)=0;
238  virtual int32_t visitBreakStatement(BreakStatement *stat)=0;
239  virtual int32_t visitContinueStatement(ContinueStatement *stat)=0;
240  virtual int32_t visitReturnStatement(ReturnStatement *stat)=0;
241  };
242 
244  {
245  protected:
246  virtual int32_t visitStatement(Statement *stat);
247  public:
248  virtual int32_t visitEmptyStatement(EmptyStatement *stat);
249  virtual int32_t visitExprStatement(ExprStatement *stat);
250  virtual int32_t visitAssertStatement(AssertStatement *stat);
251  virtual int32_t visitForStatement(ForStatement *stat);
252  virtual int32_t visitIterationStatement(IterationStatement *stat);
253  virtual int32_t visitWhileStatement(WhileStatement *stat);
254  virtual int32_t visitDoWhileStatement(DoWhileStatement *stat);
255  virtual int32_t visitBlockStatement(BlockStatement *stat);
256  virtual int32_t visitSwitchStatement(SwitchStatement *stat);
257  virtual int32_t visitCaseStatement(CaseStatement *stat);
258  virtual int32_t visitDefaultStatement(DefaultStatement *stat);
259  virtual int32_t visitIfStatement(IfStatement *stat);
260  virtual int32_t visitBreakStatement(BreakStatement *stat);
261  virtual int32_t visitContinueStatement(ContinueStatement *stat);
262  virtual int32_t visitReturnStatement(ReturnStatement *stat);
263  };
264 
266  {
267  protected:
268  virtual void visitExpression(expression_t) = 0;
269  public:
270  virtual int32_t visitExprStatement(ExprStatement *stat);
271  virtual int32_t visitAssertStatement(AssertStatement *stat);
272  virtual int32_t visitForStatement(ForStatement *stat);
273  virtual int32_t visitWhileStatement(WhileStatement *stat);
274  virtual int32_t visitDoWhileStatement(DoWhileStatement *stat);
275  virtual int32_t visitBlockStatement(BlockStatement *stat);
276  virtual int32_t visitSwitchStatement(SwitchStatement *stat);
277  virtual int32_t visitCaseStatement(CaseStatement *stat);
278  virtual int32_t visitDefaultStatement(DefaultStatement *stat);
279  virtual int32_t visitIfStatement(IfStatement *stat);
280  virtual int32_t visitReturnStatement(ReturnStatement *stat);
281  };
282 
284  {
285  protected:
286  virtual void visitExpression(expression_t);
287  std::set<symbol_t> &changes;
288  public:
289  CollectChangesVisitor(std::set<symbol_t> &);
290  };
291 
293  {
294  protected:
295  virtual void visitExpression(expression_t);
296  std::set<symbol_t> &dependencies;
297  public:
298  CollectDependenciesVisitor(std::set<symbol_t> &);
299  };
300 
302  {
303  protected:
304  virtual void visitExpression (expression_t);
305  std::list<expression_t> &expressions;
306  public:
307  CollectDynamicExpressions (std::list<expression_t>& );
308  };
309 
310 }
311 #endif
EmptyStatement()
Definition: statement.cpp:35
std::set< symbol_t > & dependencies
Definition: statement.h:296
virtual int32_t visitStatement(Statement *stat)
Definition: statement.cpp:423
expression_t cond
Definition: statement.h:79
virtual int32_t visitIfStatement(IfStatement *stat)
Definition: statement.cpp:590
BreakStatement()
Definition: statement.cpp:356
virtual int32_t visitBreakStatement(BreakStatement *stat)
Definition: statement.cpp:502
Definition: statement.h:180
virtual int32_t visitExprStatement(ExprStatement *stat)
Definition: statement.cpp:517
std::string toString(std::string prefix) const
Definition: statement.cpp:71
Definition: statement.h:301
virtual bool returns()
Definition: statement.cpp:110
Definition: statement.h:75
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:155
std::string toString(std::string prefix) const
Definition: statement.cpp:302
virtual int32_t visitSwitchStatement(SwitchStatement *stat)
Definition: statement.cpp:474
virtual bool returns()
Definition: statement.cpp:386
Statement * stat
Definition: statement.h:81
Definition: statement.h:193
virtual int32_t visitSwitchStatement(SwitchStatement *stat)
Definition: statement.cpp:573
virtual int32_t visitDefaultStatement(DefaultStatement *stat)
Definition: statement.cpp:484
CollectDependenciesVisitor(std::set< symbol_t > &)
Definition: statement.cpp:619
virtual void visitExpression(expression_t)
Definition: statement.cpp:638
A reference to a symbol.
Definition: symbols.h:107
Definition: statement.h:243
virtual int32_t visitForStatement(ForStatement *stat)=0
std::string toString(std::string prefix) const
Definition: statement.cpp:139
expression_t cond
Definition: statement.h:183
expression_t expr
Definition: statement.h:58
virtual int32_t visitForStatement(ForStatement *stat)
Definition: statement.cpp:529
std::string toString(std::string prefix) const
Definition: statement.cpp:50
virtual int32_t visitCaseStatement(CaseStatement *stat)=0
Statement class for the iterator loop-construction.
Definition: statement.h:91
virtual int32_t visitBlockStatement(BlockStatement *stat)
Definition: statement.cpp:549
Definition: statement.h:265
virtual int32_t visitDoWhileStatement(DoWhileStatement *stat)
Definition: statement.cpp:458
virtual bool returns()
Definition: statement.cpp:275
virtual int32_t visitAssertStatement(AssertStatement *stat)=0
Definition: statement.h:202
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:83
expression_t step
Definition: statement.h:80
Statement * trueCase
Definition: statement.h:184
Definition: statement.h:55
virtual bool returns()=0
virtual int32_t visitContinueStatement(ContinueStatement *stat)=0
Definition: statement.h:222
virtual int32_t visitEmptyStatement(EmptyStatement *stat)=0
virtual int32_t visitDoWhileStatement(DoWhileStatement *stat)
Definition: statement.cpp:543
virtual int32_t visitEmptyStatement(EmptyStatement *stat)
Definition: statement.cpp:428
virtual bool returns()
Definition: statement.cpp:88
Definition: statement.h:152
virtual int32_t visitContinueStatement(ContinueStatement *stat)
Definition: statement.cpp:507
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:331
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:40
virtual int32_t visitSwitchStatement(SwitchStatement *stat)=0
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:178
Definition: statement.h:211
virtual bool returns()
Definition: statement.cpp:297
std::string toString(std::string prefix) const
Definition: statement.cpp:165
virtual int32_t visitDoWhileStatement(DoWhileStatement *stat)=0
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:243
virtual int32_t visitIfStatement(IfStatement *stat)=0
Definition: lexer.cc:585
virtual int32_t visitCaseStatement(CaseStatement *stat)
Definition: statement.cpp:579
Definition: statement.h:105
virtual int32_t visitBlockStatement(BlockStatement *stat)=0
virtual bool returns()
Definition: statement.cpp:45
virtual int32_t visitIterationStatement(IterationStatement *stat)=0
expression_t init
Definition: statement.h:78
A reference to a frame.
Definition: symbols.h:183
virtual bool returns()
Definition: statement.cpp:66
expression_t cond
Definition: statement.h:165
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:270
virtual bool returns()
Definition: statement.cpp:160
virtual int32_t visitIfStatement(IfStatement *stat)
Definition: statement.cpp:489
virtual int32_t accept(StatementVisitor *visitor)=0
virtual ~StatementVisitor()
Definition: statement.h:225
std::string toString(std::string prefix) const
Definition: statement.cpp:418
expression_t cond
Definition: statement.h:108
Statement * pop_stat()
Definition: statement.cpp:236
virtual ~BlockStatement()
Definition: statement.cpp:199
virtual int32_t visitForStatement(ForStatement *stat)
Definition: statement.cpp:443
Definition: statement.h:127
virtual int32_t visitAssertStatement(AssertStatement *stat)
Definition: statement.cpp:438
std::string toString(std::string prefix) const
Definition: statement.cpp:115
Definition: statement.h:283
symbol_t symbol
Definition: statement.h:96
Definition: statement.h:35
Definition: statement.h:172
Definition: statement.h:65
Statement * back()
Definition: statement.cpp:230
frame_t getFrame()
Definition: statement.h:141
Statement * falseCase
Definition: statement.h:185
DoWhileStatement(Statement *, expression_t)
Definition: statement.cpp:171
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:408
expression_t expr
Definition: statement.h:68
const_iterator begin() const
Definition: statement.cpp:210
virtual bool returns()
Definition: statement.cpp:413
virtual bool returns()
Definition: statement.cpp:183
virtual int32_t visitBreakStatement(BreakStatement *stat)=0
virtual int32_t visitDefaultStatement(DefaultStatement *stat)
Definition: statement.cpp:585
Definition: statement.h:162
std::string toString(std::string prefix) const
Definition: statement.cpp:371
virtual bool returns()
Definition: statement.cpp:319
A reference to an expression.
Definition: expression.h:68
BlockStatement(frame_t)
Definition: statement.cpp:193
virtual bool returns()
Definition: statement.cpp:336
virtual bool returns()
Definition: statement.cpp:366
Definition: system.h:162
DefaultStatement(frame_t)
Definition: statement.cpp:308
ExprStatement(expression_t)
Definition: statement.cpp:55
expression_t cond
Definition: statement.h:120
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:361
virtual int32_t visitWhileStatement(WhileStatement *stat)
Definition: statement.cpp:453
frame_t getFrame()
Definition: statement.h:99
virtual int32_t visitExprStatement(ExprStatement *stat)
Definition: statement.cpp:433
std::string toString(std::string prefix) const
Definition: statement.cpp:345
expression_t value
Definition: statement.h:214
virtual int32_t visitCaseStatement(CaseStatement *stat)
Definition: statement.cpp:479
IterationStatement(symbol_t, frame_t, Statement *)
Definition: statement.cpp:122
ForStatement(expression_t, expression_t, expression_t, Statement *)
Definition: statement.cpp:98
CollectDynamicExpressions(std::list< expression_t > &)
Definition: statement.cpp:631
virtual int32_t visitReturnStatement(ReturnStatement *stat)
Definition: statement.cpp:601
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:61
std::set< symbol_t > & changes
Definition: statement.h:287
CaseStatement(frame_t, expression_t)
Definition: statement.cpp:286
Definition: statement.h:46
frame_t frame
Definition: statement.h:134
AssertStatement(expression_t)
Definition: statement.cpp:77
virtual void visitExpression(expression_t)=0
frame_t frame
Definition: statement.h:94
virtual int32_t visitDefaultStatement(DefaultStatement *stat)=0
std::string toString(std::string prefix) const
Definition: statement.cpp:391
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:105
virtual int32_t visitBlockStatement(BlockStatement *stat)
Definition: statement.cpp:463
CollectChangesVisitor(std::set< symbol_t > &)
Definition: statement.cpp:608
std::string toString(std::string prefix) const
Definition: statement.cpp:93
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:314
Statement * stat
Definition: statement.h:97
virtual std::string toString(std::string prefix) const =0
ContinueStatement()
Definition: statement.cpp:376
void push_stat(Statement *stat)
Definition: statement.cpp:204
Definition: statement.h:116
virtual int32_t visitReturnStatement(ReturnStatement *stat)=0
std::list< expression_t > & expressions
Definition: statement.h:305
virtual int32_t visitWhileStatement(WhileStatement *stat)=0
SwitchStatement(frame_t, expression_t)
Definition: statement.cpp:264
virtual int32_t visitWhileStatement(WhileStatement *stat)
Definition: statement.cpp:537
WhileStatement(expression_t, Statement *)
Definition: statement.cpp:148
ReturnStatement()
Definition: statement.cpp:396
virtual bool returns()
Definition: statement.cpp:134
std::vector< Statement * >::iterator iterator
Definition: statement.h:131
std::string toString(std::string prefix) const
Definition: statement.cpp:253
Statement * stat
Definition: statement.h:109
Definition: statement.h:292
Statement * stat
Definition: statement.h:119
virtual int32_t visitAssertStatement(AssertStatement *stat)
Definition: statement.cpp:523
IfStatement(expression_t, Statement *, Statement *falseStat=NULL)
Definition: statement.cpp:324
Statement()
Definition: statement.cpp:29
virtual bool returns()
Definition: statement.cpp:248
std::vector< Statement * >::const_iterator const_iterator
Definition: statement.h:130
virtual int32_t visitExprStatement(ExprStatement *stat)=0
virtual int32_t visitIterationStatement(IterationStatement *stat)
Definition: statement.cpp:448
virtual void visitExpression(expression_t)
Definition: statement.cpp:614
expression_t cond
Definition: statement.h:155
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:129
virtual ~Statement()
Definition: statement.h:38
const_iterator end() const
Definition: statement.cpp:215
std::vector< Statement * > stats
Definition: statement.h:133
virtual void visitExpression(expression_t)
Definition: statement.cpp:626
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:381
virtual int32_t accept(StatementVisitor *visitor)
Definition: statement.cpp:292
std::string toString(std::string prefix) const
Definition: statement.cpp:188
std::string toString(std::string prefix) const
Definition: statement.cpp:280
virtual int32_t visitReturnStatement(ReturnStatement *stat)
Definition: statement.cpp:512