libutap
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 -0x7FFF
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(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  virtual void addPosition(
135  uint32_t position, uint32_t offset, uint32_t line, std::string path);
136 
137  virtual void handleError(std::string);
138  virtual void handleWarning(std::string);
139  virtual void typeDuplicate();
140  virtual void typePop();
141  virtual void typeBool(PREFIX);
142  virtual void typeInt(PREFIX);
143  virtual void typeDouble(PREFIX);
144  virtual void typeBoundedInt(PREFIX);
145  virtual void typeChannel(PREFIX);
146  virtual void typeClock(PREFIX);
147  virtual void typeVoid();
148  virtual void typeScalar(PREFIX);
149  virtual void typeName(PREFIX, const char* name);
150  virtual bool isType(const char*);
151  virtual void exprTrue();
152  virtual void exprFalse();
153  virtual void exprDouble(double);
154  virtual void exprId(const char * varName);
155  virtual void exprNat(int32_t);
156  virtual void exprCallBegin();
157  virtual void exprCallEnd(uint32_t n);
158  virtual void exprArray();
159  virtual void exprPostIncrement();
160  virtual void exprPreIncrement();
161  virtual void exprPostDecrement();
162  virtual void exprPreDecrement();
163  virtual void exprAssignment(Constants::kind_t op);
164  virtual void exprUnary(Constants::kind_t unaryop);
165  virtual void exprBinary(Constants::kind_t binaryop);
166  virtual void exprNary(Constants::kind_t op, uint32_t num);
167  virtual void exprScenario(const char* name);
168  virtual expression_t exprScenario();
169  virtual void exprTernary(Constants::kind_t ternaryop, bool firstMissing);
170  virtual void exprInlineIf();
171  virtual void exprComma();
172  virtual void exprDot(const char *);
173  virtual void exprDeadlock();
174  virtual void exprForAllBegin(const char *name);
175  virtual void exprForAllEnd(const char *name);
176  virtual void exprExistsBegin(const char *name);
177  virtual void exprExistsEnd(const char *name);
178  virtual void exprSumBegin(const char *name);
179  virtual void exprSumEnd(const char *name);
180 
181  virtual void exprSMCControl(int);
183  virtual void exprProbaQuantitative(int,Constants::kind_t,bool stopCondition = false);
185  virtual void exprProbaExpected(int,const char*);
188 
189  virtual void exprSimulate(int,int,int,bool = false,int =0);
190  virtual void exprMitlFormula ( ) ;
191  virtual void exprMitlUntil (int,int ) ;
192  virtual void exprMitlRelease (int,int ) ;
193  virtual void exprMitlDisj () ;
194  virtual void exprMitlConj () ;
195  virtual void exprMitlNext () ;
196  virtual void exprMitlAtom () ;
197  virtual void exprMitlDiamond (int,int) ;
198  virtual void exprMitlBox (int,int) ;
199 
200  /*dynamic*/
201  virtual void exprSpawn (int params);
202  virtual void exprExit ();
203  virtual void exprNumOf ();
204  virtual void exprForAllDynamicBegin (const char* ,const char*);
205  virtual void exprForAllDynamicEnd (const char* name);
206  virtual void exprExistsDynamicBegin (const char*,const char*);
207  virtual void exprExistsDynamicEnd (const char*);
208  virtual void exprSumDynamicBegin (const char*,const char* );
209  virtual void exprSumDynamicEnd (const char* name);
210  virtual void exprForeachDynamicBegin (const char*,const char* );
211  virtual void exprForeachDynamicEnd (const char* name);
212  virtual void pushDynamicFrameOf (template_t* t, std::string name);
213  virtual void popDynamicFrameOf (std::string name);
214  };
215 }
216 
217 #endif
position_t position
Definition: abstractbuilder.h:48
virtual void exprMitlRelease(int, int)
Definition: expressionbuilder.cpp:1049
std::map< std::string, frame_t > dynamicFrames
Definition: expressionbuilder.h:129
virtual void exprSMCControl(int)
Definition: expressionbuilder.cpp:790
A reference to a symbol.
Definition: symbols.h:107
Definition: system.h:356
ExpressionFragments & getExpressions()
Definition: expressionbuilder.cpp:105
virtual void typePop()
Pop type at the topof the type stack.
Definition: expressionbuilder.cpp:158
virtual void exprProbaQualitative(int, Constants::kind_t, Constants::kind_t, double)
Definition: expressionbuilder.cpp:750
virtual void typeScalar(PREFIX)
Called whenever a scalar type is parsed.
Definition: expressionbuilder.cpp:235
virtual void exprPreDecrement()
Definition: expressionbuilder.cpp:458
void pushFrame(frame_t)
Push a new frame.
Definition: expressionbuilder.cpp:89
expression_t & operator[](int idx)
Definition: expressionbuilder.h:58
PREFIX
Definition: builder.h:85
virtual void exprInlineIf()
Definition: expressionbuilder.cpp:581
virtual void exprTrue()
Definition: expressionbuilder.cpp:295
virtual void exprMitlFormula()
Definition: expressionbuilder.cpp:1012
virtual void exprTernary(Constants::kind_t ternaryop, bool firstMissing)
Definition: expressionbuilder.cpp:571
virtual void exprNumOf()
Definition: expressionbuilder.cpp:1177
TimedAutomataSystem * system
Pointer to the system under construction.
Definition: expressionbuilder.h:94
bool resolve(std::string, symbol_t &)
Definition: expressionbuilder.cpp:99
virtual void exprMitlAtom()
Definition: expressionbuilder.cpp:1149
virtual void exprCallEnd(uint32_t n)
Definition: expressionbuilder.cpp:344
Definition: lexer.cc:585
virtual void exprSumDynamicEnd(const char *name)
Definition: expressionbuilder.cpp:1279
virtual void typeName(PREFIX, const char *name)
Called when a type name has been parsed.
Definition: expressionbuilder.cpp:273
virtual void exprBuiltinFunction2(Constants::kind_t)
Definition: expressionbuilder.cpp:470
virtual void exprMitlDiamond(int, int)
Definition: expressionbuilder.cpp:1073
kind_t
Definition: common.h:37
virtual bool allowProcessReferences()
If this method returns true, it is allowed to access the private identifiers of a process by prefixin...
Definition: expressionbuilder.h:128
uint32_t size()
Definition: expressionbuilder.h:65
A reference to a frame.
Definition: symbols.h:183
void pop()
Definition: expressionbuilder.h:62
virtual void exprPostDecrement()
Definition: expressionbuilder.cpp:452
void push(expression_t e)
Definition: expressionbuilder.h:60
void push(type_t value)
Definition: expressionbuilder.h:75
virtual void typeChannel(PREFIX)
Called whenever a channel type is parsed.
Definition: expressionbuilder.cpp:196
virtual void exprProbaCompare(int, Constants::kind_t, int, Constants::kind_t)
Definition: expressionbuilder.cpp:877
virtual void exprForAllBegin(const char *name)
Definition: expressionbuilder.cpp:681
Definition: expressionbuilder.h:68
virtual void typeDuplicate()
Duplicate type at the top of the type stack.
Definition: expressionbuilder.cpp:153
virtual void exprDouble(double)
Definition: expressionbuilder.cpp:309
virtual void typeBoundedInt(PREFIX)
Called whenever an integer type with a range is parsed.
Definition: expressionbuilder.cpp:188
virtual void typeDouble(PREFIX)
Called whenever a double type is parsed.
Definition: expressionbuilder.cpp:182
virtual void popDynamicFrameOf(std::string name)
Definition: expressionbuilder.cpp:1332
virtual void typeClock(PREFIX)
Called whenever a clock type is parsed.
Definition: expressionbuilder.cpp:202
int32_t scalar_count
Counter for creating unique scalarset names.
Definition: expressionbuilder.h:100
TypeFragments typeFragments
Type stack.
Definition: expressionbuilder.h:88
virtual void exprExistsBegin(const char *name)
Definition: expressionbuilder.cpp:714
type_t applyPrefix(PREFIX, type_t type)
Given a prefix and a type, this method creates a new type by applying the prefix. ...
Definition: expressionbuilder.cpp:130
virtual void exprExit()
Definition: expressionbuilder.cpp:1172
virtual void exprMitlNext()
Definition: expressionbuilder.cpp:1135
virtual void exprExistsDynamicBegin(const char *, const char *)
Definition: expressionbuilder.cpp:1227
virtual void exprAssignment(Constants::kind_t op)
Definition: expressionbuilder.cpp:479
Definition: expressionbuilder.h:53
A reference to an expression.
Definition: expression.h:68
virtual void exprSumEnd(const char *name)
Definition: expressionbuilder.cpp:737
virtual void exprProbaExpected(int, const char *)
Definition: expressionbuilder.cpp:926
virtual void exprArray()
Definition: expressionbuilder.cpp:417
virtual void exprBinary(Constants::kind_t binaryop)
Definition: expressionbuilder.cpp:503
virtual void exprId(const char *varName)
Definition: expressionbuilder.cpp:316
virtual void exprExistsEnd(const char *name)
Definition: expressionbuilder.cpp:719
virtual void pushDynamicFrameOf(template_t *t, std::string name)
Definition: expressionbuilder.cpp:1324
virtual void exprNat(int32_t)
Definition: expressionbuilder.cpp:334
virtual void exprExistsDynamicEnd(const char *)
Definition: expressionbuilder.cpp:1239
Definition: abstractbuilder.h:45
template_t * currentTemplate
The template currently being parsed.
Definition: expressionbuilder.h:97
virtual void exprSpawn(int params)
Definition: expressionbuilder.cpp:1161
virtual void addPosition(uint32_t position, uint32_t offset, uint32_t line, std::string path)
Add mapping from an absolute position to a relative XML element.
Definition: expressionbuilder.cpp:73
virtual void exprSimulate(int, int, int, bool=false, int=0)
Definition: expressionbuilder.cpp:970
virtual void exprNary(Constants::kind_t op, uint32_t num)
Definition: expressionbuilder.cpp:531
virtual bool isType(const char *)
Must return true if and only if name is registered in the symbol table as a named type...
Definition: expressionbuilder.cpp:110
virtual void handleError(std::string)
Definition: expressionbuilder.cpp:79
type_t & operator[](int idx)
Definition: expressionbuilder.h:73
virtual void exprUnary(Constants::kind_t unaryop)
Definition: expressionbuilder.cpp:488
virtual void exprMitlDisj()
Definition: expressionbuilder.cpp:1118
void duplicate()
Definition: expressionbuilder.h:79
virtual void exprSumDynamicBegin(const char *, const char *)
Definition: expressionbuilder.cpp:1267
virtual void exprCallBegin()
Definition: expressionbuilder.cpp:339
virtual void exprFalse()
Definition: expressionbuilder.cpp:302
virtual void exprComma()
Definition: expressionbuilder.cpp:591
virtual void exprForeachDynamicBegin(const char *, const char *)
Definition: expressionbuilder.cpp:1296
virtual expression_t exprScenario()
Definition: expressionbuilder.cpp:554
A reference to a type.
Definition: type.h:92
virtual void exprDot(const char *)
Definition: expressionbuilder.cpp:600
virtual void exprForeachDynamicEnd(const char *name)
Definition: expressionbuilder.cpp:1307
virtual void exprForAllEnd(const char *name)
Definition: expressionbuilder.cpp:700
virtual void exprPreIncrement()
Definition: expressionbuilder.cpp:446
void pop()
Definition: expressionbuilder.h:77
virtual void exprSumBegin(const char *name)
Definition: expressionbuilder.cpp:732
virtual void exprMitlBox(int, int)
Definition: expressionbuilder.cpp:1096
virtual void exprMitlUntil(int, int)
Definition: expressionbuilder.cpp:1024
virtual void typeInt(PREFIX)
Called whenever an integer type is parsed.
Definition: expressionbuilder.cpp:169
virtual void typeBool(PREFIX)
Called whenever a boolean type is parsed.
Definition: expressionbuilder.cpp:163
virtual void handleWarning(std::string)
Definition: expressionbuilder.cpp:84
virtual void exprDeadlock()
Definition: expressionbuilder.cpp:329
expression_t makeConstant(int value)
Definition: expressionbuilder.cpp:120
virtual void exprBuiltinFunction1(Constants::kind_t)
Definition: expressionbuilder.cpp:464
virtual void exprPostIncrement()
Definition: expressionbuilder.cpp:440
virtual void exprProbaQuantitative(int, Constants::kind_t, bool stopCondition=false)
Definition: expressionbuilder.cpp:813
virtual void typeVoid()
Called whenever a void type is parsed.
Definition: expressionbuilder.cpp:208
virtual void exprForAllDynamicEnd(const char *name)
Definition: expressionbuilder.cpp:1196
Definition: system.h:472
void popFrame()
Pop the topmost frame.
Definition: expressionbuilder.cpp:94
std::stack< frame_t > frames
Frame stack.
Definition: expressionbuilder.h:91
ExpressionFragments fragments
Expression stack.
Definition: expressionbuilder.h:85
virtual void exprMitlConj()
Definition: expressionbuilder.cpp:1127
ExpressionBuilder(TimedAutomataSystem *)
Definition: expressionbuilder.cpp:66
Partial implementation of the builder interface: The ExpressionBuilder implements all expression rela...
Definition: expressionbuilder.h:50
virtual void exprForAllDynamicBegin(const char *, const char *)
Definition: expressionbuilder.cpp:1185