libutap  0.93
Uppaal Timed Automata Parser
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 "\t"
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(const std::string& prefix) const = 0;
42  protected:
43  Statement();
44  };
45 
46  class EmptyStatement: public Statement
47  {
48  public:
50  int32_t accept(StatementVisitor *visitor) override;
51  bool returns() override;
52  std::string toString(const std::string& prefix) const override;
53  };
54 
55  class ExprStatement: public Statement
56  {
57  public:
60  int32_t accept(StatementVisitor *visitor) override;
61  bool returns() override;
62  std::string toString(const std::string& prefix) const override;
63  };
64 
65  class AssertStatement: public Statement
66  {
67  public:
70  int32_t accept(StatementVisitor *visitor) override;
71  bool returns() override;
72  std::string toString(const std::string& prefix) const override;
73  };
74 
75  class ForStatement: public Statement
76  {
77  public:
83  int32_t accept(StatementVisitor *visitor) override;
84  bool returns() override;
85  std::string toString(const std::string& prefix) const override;
86  };
87 
92  {
93  protected:
95  public:
99  frame_t getFrame() { return frame; }
100  int32_t accept(StatementVisitor *visitor) override;
101  bool returns() override;
102  std::string toString(const std::string& prefix) const override;
103  };
104 
105  class WhileStatement: public Statement
106  {
107  public:
111  int32_t accept(StatementVisitor *visitor) override;
112  bool returns() override;
113  std::string toString(const std::string& prefix) const override;
114  };
115 
117  {
118  public:
122  int32_t accept(StatementVisitor *visitor) override;
123  bool returns() override;
124  std::string toString(const std::string& prefix) const override;
125  };
126 
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  ~BlockStatement() override;
138  int32_t accept(StatementVisitor *visitor) override;
139  bool returns() override;
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(const std::string& prefix) const override;
150  };
151 
153  {
154  public:
157  int32_t accept(StatementVisitor *visitor) override;
158  bool returns() override;
159  std::string toString(const std::string& prefix) const override;
160  };
161 
163  {
164  public:
167  int32_t accept(StatementVisitor *visitor) override;
168  bool returns() override;
169  std::string toString(const std::string& prefix) const override;
170  };
171 
173  {
174  public:
176  int32_t accept(StatementVisitor *visitor) override;
177  bool returns() override;
178  };
179 
180  class IfStatement: public Statement
181  {
182  public:
187  Statement* falseStat=nullptr);
188  int32_t accept(StatementVisitor *visitor) override;
189  bool returns() override;
190  std::string toString(const std::string& prefix) const override;
191  };
192 
193  class BreakStatement: public Statement
194  {
195  public:
196  BreakStatement();
197  int32_t accept(StatementVisitor *visitor) override;
198  bool returns() override;
199  std::string toString(const std::string& prefix) const override;
200  };
201 
203  {
204  public:
206  int32_t accept(StatementVisitor *visitor) override;
207  bool returns() override;
208  std::string toString(const std::string& prefix) const override;
209  };
210 
212  {
213  public:
215  ReturnStatement();
217  int32_t accept(StatementVisitor *visitor) override;
218  bool returns() override;
219  std::string toString(const std::string& prefix) const override;
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  int32_t visitEmptyStatement(EmptyStatement *stat) override;
249  int32_t visitExprStatement(ExprStatement *stat) override;
250  int32_t visitAssertStatement(AssertStatement *stat) override;
251  int32_t visitForStatement(ForStatement *stat) override;
252  int32_t visitIterationStatement(IterationStatement *stat) override;
253  int32_t visitWhileStatement(WhileStatement *stat) override;
254  int32_t visitDoWhileStatement(DoWhileStatement *stat) override;
255  int32_t visitBlockStatement(BlockStatement *stat) override;
256  int32_t visitSwitchStatement(SwitchStatement *stat) override;
257  int32_t visitCaseStatement(CaseStatement *stat) override;
258  int32_t visitDefaultStatement(DefaultStatement *stat) override;
259  int32_t visitIfStatement(IfStatement *stat) override;
260  int32_t visitBreakStatement(BreakStatement *stat) override;
261  int32_t visitContinueStatement(ContinueStatement *stat) override;
262  int32_t visitReturnStatement(ReturnStatement *stat) override;
263  };
264 
266  {
267  protected:
268  virtual void visitExpression(expression_t) = 0;
269  public:
270  int32_t visitExprStatement(ExprStatement *stat) override;
271  int32_t visitAssertStatement(AssertStatement *stat) override;
272  int32_t visitForStatement(ForStatement *stat) override;
273  int32_t visitWhileStatement(WhileStatement *stat) override;
274  int32_t visitDoWhileStatement(DoWhileStatement *stat) override;
275  int32_t visitBlockStatement(BlockStatement *stat) override;
276  int32_t visitSwitchStatement(SwitchStatement *stat) override;
277  int32_t visitCaseStatement(CaseStatement *stat) override;
278  int32_t visitDefaultStatement(DefaultStatement *stat) override;
279  int32_t visitIfStatement(IfStatement *stat) override;
280  int32_t visitReturnStatement(ReturnStatement *stat) override;
281  };
282 
284  {
285  protected:
286  void visitExpression(expression_t) override;
287  std::set<symbol_t> &changes;
288  public:
289  CollectChangesVisitor(std::set<symbol_t> &);
290  };
291 
293  {
294  protected:
295  void visitExpression(expression_t) override;
296  std::set<symbol_t> &dependencies;
297  public:
298  CollectDependenciesVisitor(std::set<symbol_t> &);
299  };
300 
302  {
303  protected:
304  void visitExpression (expression_t) override;
305  std::list<expression_t> &expressions;
306  public:
307  CollectDynamicExpressions (std::list<expression_t>& );
308  };
309 
310 }
311 #endif
expression_t value
Definition: statement.h:214
std::vector< Statement * >::const_iterator const_iterator
Definition: statement.h:130
expression_t cond
Definition: statement.h:165
Statement * falseCase
Definition: statement.h:185
frame_t getFrame()
Definition: statement.h:141
virtual bool returns()=0
expression_t cond
Definition: statement.h:183
expression_t cond
Definition: statement.h:155
Statement * stat
Definition: statement.h:109
A reference to a symbol.
Definition: symbols.h:107
std::vector< Statement * >::iterator iterator
Definition: statement.h:131
Statement class for the iterator loop-construction.
Definition: statement.h:91
virtual ~StatementVisitor()
Definition: statement.h:225
expression_t expr
Definition: statement.h:58
expression_t expr
Definition: statement.h:68
std::list< expression_t > & expressions
Definition: statement.h:305
A reference to a frame.
Definition: symbols.h:183
std::set< symbol_t > & changes
Definition: statement.h:287
std::vector< Statement * > stats
Definition: statement.h:133
std::set< symbol_t > & dependencies
Definition: statement.h:296
A reference to an expression.
Definition: expression.h:70
virtual ~Statement()
Definition: statement.h:38
expression_t cond
Definition: statement.h:120
expression_t init
Definition: statement.h:78
virtual int32_t accept(StatementVisitor *visitor)=0
expression_t step
Definition: statement.h:80
expression_t cond
Definition: statement.h:108
expression_t cond
Definition: statement.h:79
Statement * trueCase
Definition: statement.h:184
Definition: lexer.cc:817
virtual std::string toString(const std::string &prefix) const =0
Statement * stat
Definition: statement.h:81