libutap  0.93
Uppaal Timed Automata Parser
expressionbuilder.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-2003 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_EXPRESSIONBUILDER_HH
23 #define UTAP_EXPRESSIONBUILDER_HH
24 
25 #include <stack>
26 #include <vector>
27 #include <cassert>
28 
29 #include "abstractbuilder.h"
30 #include "utap.h"
31 
32 #define defaultIntMin -0x8000
33 #define defaultIntMax 0x7FFF
34 
35 namespace UTAP
36 {
51  {
52  public:
54  {
55  private:
56  std::vector<expression_t> data;
57  public:
59  { return data[data.size() - idx - 1]; }
61  { data.push_back(e); }
62  void pop()
63  { data.pop_back(); }
64  void pop(uint32_t n);
65  uint32_t size() { return data.size(); }
66  };
67 
69  {
70  private:
71  std::vector<type_t> data;
72  public:
73  type_t &operator[](int idx)
74  { return data[data.size() - idx - 1]; }
75  void push(type_t value)
76  { data.push_back(value); }
77  void pop()
78  { assert(!data.empty()); data.pop_back(); }
79  void duplicate()
80  { assert(!data.empty()); data.push_back(data.back()); }
81  };
82 
83  protected:
86 
89 
91  std::stack<frame_t> frames;
92 
95 
98 
100  int32_t scalar_count;
101 
103  void pushFrame(frame_t);
104 
106  void popFrame();
107 
108  bool resolve(const std::string&, symbol_t &);
109 
110  expression_t makeConstant(int value);
111  expression_t makeConstant(double value);
112 
119 
128  virtual bool allowProcessReferences() { return false; }
129  std::map<std::string,frame_t> dynamicFrames;
130  public:
133 
134  void addPosition(uint32_t position, uint32_t offset, uint32_t line,
135  const std::string& path) override;
136 
137  void handleError(const std::string&) override;
138  void handleWarning(const std::string&) override;
139  void typeDuplicate() override;
140  void typePop() override;
141  void typeBool(PREFIX) override;
142  void typeInt(PREFIX) override;
143  void typeDouble(PREFIX) override;
144  void typeBoundedInt(PREFIX) override;
145  void typeChannel(PREFIX) override;
146  void typeClock(PREFIX) override;
147  void typeVoid() override;
148  void typeScalar(PREFIX) override;
149  void typeName(PREFIX, const char* name) override;
150  bool isType(const char*) override;
151  void exprTrue() override;
152  void exprFalse() override;
153  void exprDouble(double) override;
154  void exprId(const char * varName) override;
155  void exprNat(int32_t) override;
156  void exprCallBegin() override;
157  void exprCallEnd(uint32_t n) override;
158  void exprArray() override;
159  void exprPostIncrement() override;
160  void exprPreIncrement() override;
161  void exprPostDecrement() override;
162  void exprPreDecrement() override;
163  void exprAssignment(Constants::kind_t op) override;
164  void exprUnary(Constants::kind_t unaryop) override;
165  void exprBinary(Constants::kind_t binaryop) override;
166  void exprNary(Constants::kind_t op, uint32_t num) override;
167  void exprScenario(const char* name) override;
169  void exprTernary(Constants::kind_t ternaryop, bool firstMissing) override;
170  void exprInlineIf() override;
171  void exprComma() override;
172  void exprDot(const char *) override;
173  void exprDeadlock() override;
174  void exprForAllBegin(const char *name) override;
175  void exprForAllEnd(const char *name) override;
176  void exprExistsBegin(const char *name) override;
177  void exprExistsEnd(const char *name) override;
178  void exprSumBegin(const char *name) override;
179  void exprSumEnd(const char *name) override;
180 
184 
185  void exprSMCControl() override;
189  void exprProbaExpected(const char* aggregatingOp) override;
190 
191  void exprSimulate(int,bool = false,int =0) override;
192  void exprMitlFormula() override;
193  void exprMitlUntil(int,int) override;
194  void exprMitlRelease(int,int) override;
195  void exprMitlDisj() override;
196  void exprMitlConj() override;
197  void exprMitlNext() override;
198  void exprMitlAtom() override;
199  void exprMitlDiamond(int,int) override;
200  void exprMitlBox(int,int) override;
201 
202  /* Dynamic process creation */
203  void exprSpawn(int params) override;
204  void exprExit() override;
205  void exprNumOf() override;
206  void exprForAllDynamicBegin(const char* ,const char*) override;
207  void exprForAllDynamicEnd(const char* name) override;
208  void exprExistsDynamicBegin(const char*,const char*) override;
209  void exprExistsDynamicEnd(const char*) override;
210  void exprSumDynamicBegin(const char*,const char* ) override;
211  void exprSumDynamicEnd(const char* name) override;
212  void exprForeachDynamicBegin(const char*,const char* ) override;
213  void exprForeachDynamicEnd(const char* name) override;
214  void pushDynamicFrameOf(template_t* t, const std::string& name);// no override
215  void popDynamicFrameOf(const std::string& name);
216  };
217 }
218 
219 #endif
void exprSumBegin(const char *name) override
void exprPostDecrement() override
void exprMitlBox(int, int) override
TimedAutomataSystem * system
Pointer to the system under construction.
void exprBuiltinFunction2(Constants::kind_t) override
void exprTernary(Constants::kind_t ternaryop, bool firstMissing) override
void typeChannel(PREFIX) override
Called whenever a channel type is parsed.
void exprSumDynamicEnd(const char *name) override
void exprForAllEnd(const char *name) override
void exprSumEnd(const char *name) override
void popFrame()
Pop the topmost frame.
void exprExistsDynamicBegin(const char *, const char *) override
void exprId(const char *varName) override
A reference to a symbol.
Definition: symbols.h:107
void exprNary(Constants::kind_t op, uint32_t num) override
void exprMitlRelease(int, int) override
void typeBoundedInt(PREFIX) override
Called whenever an integer type with a range is parsed.
void typeInt(PREFIX) override
Called whenever an integer type is parsed.
void exprBuiltinFunction1(Constants::kind_t) override
std::map< std::string, frame_t > dynamicFrames
void exprUnary(Constants::kind_t unaryop) override
void exprProbaExpected(const char *aggregatingOp) override
void typeScalar(PREFIX) override
Called whenever a scalar type is parsed.
void handleWarning(const std::string &) override
bool resolve(const std::string &, symbol_t &)
void exprAssignment(Constants::kind_t op) override
void exprPreIncrement() override
void typeName(PREFIX, const char *name) override
Called when a type name has been parsed.
void exprCallEnd(uint32_t n) override
ExpressionFragments & getExpressions()
void pushFrame(frame_t)
Push a new frame.
void exprProbaQuantitative(Constants::kind_t) override
void typeVoid() override
Called whenever a void type is parsed.
Partial implementation of the builder interface: The ExpressionBuilder implements all expression rela...
void exprForAllDynamicBegin(const char *, const char *) override
void exprExistsDynamicEnd(const char *) override
void exprForAllDynamicEnd(const char *name) override
template_t * currentTemplate
The template currently being parsed.
void exprSumDynamicBegin(const char *, const char *) override
ExpressionFragments fragments
Expression stack.
void typePop() override
Pop type at the topof the type stack.
virtual bool allowProcessReferences()
If this method returns true, it is allowed to access the private identifiers of a process by prefixin...
std::stack< frame_t > frames
Frame stack.
void handleError(const std::string &) override
void typeBool(PREFIX) override
Called whenever a boolean type is parsed.
void exprMitlUntil(int, int) override
void exprSpawn(int params) override
A reference to a frame.
Definition: symbols.h:183
void exprForAllBegin(const char *name) override
A reference to a type.
Definition: type.h:93
void exprProbaQualitative(Constants::kind_t, Constants::kind_t, double) override
void exprSimulate(int, bool=false, int=0) override
void exprPostIncrement() override
ExpressionBuilder(TimedAutomataSystem *)
bool isType(const char *) override
Must return true if and only if name is registered in the symbol table as a named type...
void exprBuiltinFunction3(Constants::kind_t) override
void exprNat(int32_t) override
A reference to an expression.
Definition: expression.h:70
void exprExistsBegin(const char *name) override
void exprDouble(double) override
void exprForeachDynamicEnd(const char *name) override
void exprProbaCompare(Constants::kind_t, Constants::kind_t) override
void pushDynamicFrameOf(template_t *t, const std::string &name)
void exprExistsEnd(const char *name) override
void exprBinary(Constants::kind_t binaryop) override
void exprDot(const char *) override
Definition: lexer.cc:817
void typeDuplicate() override
Duplicate type at the top of the type stack.
type_t applyPrefix(PREFIX, type_t type)
Given a prefix and a type, this method creates a new type by applying the prefix. ...
void popDynamicFrameOf(const std::string &name)
void typeDouble(PREFIX) override
Called whenever a double type is parsed.
void typeClock(PREFIX) override
Called whenever a clock type is parsed.
TypeFragments typeFragments
Type stack.
void exprMitlDiamond(int, int) override
void exprForeachDynamicBegin(const char *, const char *) override
void exprPreDecrement() override
expression_t makeConstant(int value)
void addPosition(uint32_t position, uint32_t offset, uint32_t line, const std::string &path) override
Add mapping from an absolute position to a relative XML element.
int32_t scalar_count
Counter for creating unique scalarset names.