00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef UTAP_BUILDER_HH
00023 #define UTAP_BUILDER_HH
00024
00025 #include <cstdio>
00026 #include <stdexcept>
00027 #include <string>
00028 #include <boost/format.hpp>
00029
00030 #include "utap/common.h"
00031
00032 namespace UTAP
00033 {
00039 class TypeException : public std::runtime_error
00040 {
00041 public:
00042 TypeException(std::string);
00043 TypeException(const boost::format &);
00044 };
00045
00079 class ParserBuilder
00080 {
00081 public:
00082
00083
00084
00085 enum PREFIX { PREFIX_NONE = 0,
00086 PREFIX_CONST = 1,
00087 PREFIX_URGENT = 2,
00088 PREFIX_BROADCAST = 4,
00089 PREFIX_URGENT_BROADCAST = 6,
00090 PREFIX_META = 8 };
00091
00092 virtual ~ParserBuilder() {}
00093
00098 virtual void addPosition(
00099 uint32_t position, uint32_t offset, uint32_t line, std::string path) = 0;
00100
00106 virtual void setPosition(uint32_t a, uint32_t b) = 0;
00107
00108
00109 virtual void handleError(std::string) = 0;
00110
00111
00112 virtual void handleWarning(std::string) = 0;
00113
00114 void handleWarning(const char *msg, ...);
00115
00116 void handleError(const char *msg, ...);
00117
00123 virtual bool isType(const char*) = 0;
00124
00126 virtual void typeDuplicate() = 0;
00127
00129 virtual void typePop() = 0;
00130
00134 virtual void typeBool(PREFIX) = 0;
00135
00139 virtual void typeInt(PREFIX) = 0;
00140
00146 virtual void typeBoundedInt(PREFIX) = 0;
00147
00151 virtual void typeChannel(PREFIX) = 0;
00152
00156 virtual void typeClock() = 0;
00157
00161 virtual void typeVoid() = 0;
00162
00167 virtual void typeArrayOfSize(size_t) = 0;
00168
00173 virtual void typeArrayOfType(size_t) = 0;
00174
00179 virtual void typeScalar(PREFIX) = 0;
00180
00185 virtual void typeName(PREFIX, const char* name) = 0;
00186
00192 virtual void typeStruct(PREFIX, uint32_t fields) = 0;
00193
00200 virtual void structField(const char* name) = 0;
00201
00206 virtual void declTypeDef(const char* name) = 0;
00207
00211 virtual void declVar(const char* name, bool init) = 0;
00212
00213 virtual void declInitialiserList(uint32_t num) = 0;
00214 virtual void declFieldInit(const char* name) = 0;
00215
00220 virtual void declProgress(bool hasGuard) = 0;
00221
00222
00223
00224
00225 virtual void declParameter(const char* name, bool ref) = 0;
00226
00227 virtual void declFuncBegin(const char* name) = 0;
00228 virtual void declFuncEnd() = 0;
00229
00230
00231
00232
00233 virtual void procBegin(const char* name) = 0;
00234 virtual void procEnd() = 0;
00235 virtual void procState(const char* name, bool hasInvariant) = 0;
00236 virtual void procStateCommit(const char* name) = 0;
00237 virtual void procStateUrgent(const char* name) = 0;
00238 virtual void procStateInit(const char* name) = 0;
00239 virtual void procEdgeBegin(const char* from, const char* to, const bool control) = 0;
00240 virtual void procEdgeEnd(const char* from, const char* to) = 0;
00241 virtual void procSelect(const char * id) = 0;
00242 virtual void procGuard() = 0;
00243 virtual void procSync(Constants::synchronisation_t type) = 0;
00244 virtual void procUpdate() = 0;
00245
00246
00247
00248
00249 virtual void blockBegin() = 0;
00250 virtual void blockEnd() = 0;
00251 virtual void emptyStatement() = 0;
00252 virtual void forBegin() = 0;
00253 virtual void forEnd() = 0;
00254 virtual void iterationBegin(const char *name) = 0;
00255 virtual void iterationEnd(const char *name) = 0;
00256 virtual void whileBegin() = 0;
00257 virtual void whileEnd() = 0;
00258 virtual void doWhileBegin() = 0;
00259 virtual void doWhileEnd() = 0;
00260 virtual void ifBegin() = 0;
00261 virtual void ifElse() = 0;
00262 virtual void ifEnd(bool) = 0;
00263 virtual void breakStatement() = 0;
00264 virtual void continueStatement() = 0;
00265 virtual void switchBegin() = 0;
00266 virtual void switchEnd() = 0;
00267 virtual void caseBegin() = 0;
00268 virtual void caseEnd() = 0;
00269 virtual void defaultBegin() = 0;
00270 virtual void defaultEnd() = 0;
00271 virtual void exprStatement() = 0;
00272 virtual void returnStatement(bool) = 0;
00273 virtual void assertStatement() = 0;
00274
00275
00276
00277
00278 virtual void exprFalse() = 0;
00279 virtual void exprTrue() = 0;
00280 virtual void exprId(const char * varName) = 0;
00281 virtual void exprNat(int32_t) = 0;
00282 virtual void exprCallBegin() = 0;
00283 virtual void exprCallEnd(uint32_t n) = 0;
00284 virtual void exprArray() = 0;
00285 virtual void exprPostIncrement() = 0;
00286 virtual void exprPreIncrement() = 0;
00287 virtual void exprPostDecrement() = 0;
00288 virtual void exprPreDecrement() = 0;
00289 virtual void exprAssignment(Constants::kind_t op) = 0;
00290 virtual void exprUnary(Constants::kind_t unaryop) = 0;
00291 virtual void exprBinary(Constants::kind_t binaryop) = 0;
00292 virtual void exprTernary(Constants::kind_t ternaryop, bool firstMissing = false) = 0;
00293 virtual void exprInlineIf() = 0;
00294 virtual void exprComma() = 0;
00295 virtual void exprDot(const char *) = 0;
00296 virtual void exprDeadlock() = 0;
00297 virtual void exprForAllBegin(const char *name) = 0;
00298 virtual void exprForAllEnd(const char *name) = 0;
00299 virtual void exprExistsBegin(const char *name) = 0;
00300 virtual void exprExistsEnd(const char *name) = 0;
00301
00302
00303
00304
00305 virtual void instantiationBegin(
00306 const char* id, size_t parameters, const char* templ) = 0;
00307 virtual void instantiationEnd(
00308 const char* id, size_t parameters, const char* templ, size_t arguments) = 0;
00309 virtual void process(const char*) = 0;
00310 virtual void done() = 0;
00311
00312
00313
00314
00315 virtual void property() = 0;
00316 virtual void paramProperty(size_t, Constants::kind_t) = 0;
00317 virtual void declParamId(const char*) = 0;
00318
00319
00320
00321
00322 virtual void beforeUpdate() = 0;
00323 virtual void afterUpdate() = 0;
00324
00325
00326
00327
00328 virtual void incProcPriority() = 0;
00329 virtual void incChanPriority() = 0;
00330 virtual void chanPriority() = 0;
00331 virtual void procPriority(const char*) = 0;
00332 virtual void defaultChanPriority() = 0;
00333
00334
00335
00336
00337 virtual void ssQueryBegin() = 0;
00338 virtual void ssQueryEnd() = 0;
00339 };
00340 }
00341
00349 int32_t parseXTA(FILE *, UTAP::ParserBuilder *, bool newxta);
00350
00351 int32_t parseXTA(const char*, UTAP::ParserBuilder *, bool newxta);
00352
00360 int32_t parseXTA(const char*, UTAP::ParserBuilder *,
00361 bool newxta, UTAP::xta_part_t part, std::string xpath);
00362
00363
00371 int32_t parseXMLBuffer(const char *buffer, UTAP::ParserBuilder *,
00372 bool newxta);
00373
00382 int32_t parseXMLFile(const char *filename, UTAP::ParserBuilder *, bool newxta);
00383
00391 int32_t parseProperty(const char *str,
00392 UTAP::ParserBuilder *aParserBuilder, bool ssql = false);
00393
00400 int32_t parseProperty(FILE *, UTAP::ParserBuilder *aParserBuilder, bool ssql = false);
00401
00402
00403 #endif