00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef UTAP_SYSTEMBUILDER_H
00023 #define UTAP_SYSTEMBUILDER_H
00024
00025 #include <cassert>
00026 #include <vector>
00027 #include <inttypes.h>
00028
00029 #include "utap/expressionbuilder.h"
00030 #include "utap/utap.h"
00031
00032 namespace UTAP
00033 {
00068 class SystemBuilder : public ExpressionBuilder
00069 {
00070 protected:
00071
00072 static const char *const unsupported;
00073 static const char *const invalid_type;
00074
00075
00076
00077
00078
00079 bool strict_range;
00080
00081
00082
00083
00084 int32_t currentPriority;
00085 private:
00086
00087
00088
00089
00090
00091
00092
00093 frame_t templateset;
00094
00095
00096 frame_t params;
00097
00098
00099 function_t *currentFun;
00100
00101 template_t *currentTemplate;
00102
00103 edge_t *currentEdge;
00104
00105
00106 std::vector<BlockStatement*> blocks;
00107
00108
00109
00110
00111
00112 type_t buildArrayType(type_t type, uint32_t dim);
00113 type_t getElementTypeOfArray(type_t type);
00114 declarations_t *getCurrentDeclarationBlock();
00115
00116 public:
00117
00118 SystemBuilder(TimedAutomataSystem *);
00119
00120
00121
00122
00123
00124 virtual void typeStruct(int32_t prefix, uint32_t fields);
00125
00126 virtual void structField(const char* name, uint32_t dim);
00127
00128 virtual void structFieldEnd();
00129
00130 virtual void declTypeDef(const char* name, uint32_t dim);
00131
00132 virtual void declTypeDefEnd();
00133
00134
00135
00136
00137 virtual void declVar(const char* name, uint32_t dim, bool init);
00138
00139 virtual void declVarEnd();
00140 virtual void declInitialiserList(uint32_t num);
00141 virtual void declFieldInit(const char* name);
00142
00143
00144
00145
00146 virtual void declProgress(bool);
00147
00148
00149
00150
00151 virtual void declParameter(const char* name, bool reference, uint32_t dim);
00152
00153 virtual void declParameterEnd();
00154
00155 virtual void declFuncBegin(const char* name, uint32_t n);
00156 virtual void declFuncEnd();
00157
00158
00159
00160
00161 virtual void procTemplateSet(const char *name);
00162 virtual void procBegin(const char* name, uint32_t n, uint32_t m);
00163 virtual void procEnd();
00164 virtual void procState(const char* name, bool hasInvariant);
00165 virtual void procStateCommit(const char* name);
00166 virtual void procStateUrgent(const char* name);
00167 virtual void procStateWinning(const char* name);
00168 virtual void procStateLosing(const char* name);
00169 virtual void procStateInit(const char* name);
00170 virtual void procEdgeBegin(const char* from, const char* to, const bool control);
00171 virtual void procEdgeEnd(const char* from, const char* to);
00172
00173
00174 virtual void procSelect(const char *id);
00175
00176
00177 virtual void procGuard();
00178
00179
00180 virtual void procSync(Constants::synchronisation_t type);
00181
00182
00183 virtual void procUpdate();
00184
00185
00186
00187
00188 virtual void blockBegin();
00189 virtual void blockEnd();
00190 virtual void emptyStatement();
00191 virtual void forBegin();
00192 virtual void forEnd();
00193 virtual void iterationBegin(const char *name);
00194 virtual void iterationEnd(const char *name);
00195 virtual void whileBegin();
00196 virtual void whileEnd();
00197 virtual void doWhileBegin();
00198 virtual void doWhileEnd();
00199 virtual void ifBegin();
00200 virtual void ifElse();
00201 virtual void ifEnd(bool);
00202 virtual void breakStatement();
00203 virtual void continueStatement();
00204 virtual void switchBegin();
00205 virtual void switchEnd();
00206 virtual void caseBegin();
00207 virtual void caseEnd();
00208 virtual void defaultBegin();
00209 virtual void defaultEnd();
00210 virtual void exprStatement();
00211 virtual void returnStatement(bool);
00212
00213
00214
00215
00216 virtual void exprCallBegin();
00217
00218
00219
00220
00221 virtual void instantiationBegin(const char*, const char*);
00222 virtual void instantiationEnd(const char *, const char *, uint32_t n);
00223 virtual void process(const char*);
00224
00225 virtual void done();
00226
00227
00228
00229
00230
00231 virtual void beforeUpdate();
00232 virtual void afterUpdate();
00233
00234
00235
00236
00237
00238 virtual void lowPriority(const char*);
00239 virtual void samePriority(const char*);
00240 virtual void higherPriority(const char*);
00241 };
00242 }
00243 #endif