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 <iostream>
00027 #include <exception>
00028
00029 #include "utap/common.h"
00030
00031 namespace UTAP
00032 {
00038 class TypeException : public std::exception
00039 {
00040 private:
00041 char _what[256];
00042 public:
00043 TypeException(const char *fmt, ...);
00044 const char *what() const throw ();
00045 };
00046
00047 std::ostream& operator <<(std::ostream& out, const TypeException& exc);
00048
00088 class ParserBuilder
00089 {
00090 public:
00091
00092
00093
00094 static const int32_t PREFIX_NONE = 0;
00095 static const int32_t PREFIX_CONST = 1;
00096 static const int32_t PREFIX_URGENT = 2;
00097 static const int32_t PREFIX_BROADCAST = 4;
00098 static const int32_t PREFIX_URGENT_BROADCAST =
00099 PREFIX_URGENT | PREFIX_BROADCAST;
00100 static const int32_t PREFIX_META = 8;
00101
00102 virtual ~ParserBuilder() {}
00103
00109 virtual void setErrorHandler(ErrorHandler *) = 0;
00110
00116 virtual void setPosition(const position_t &) = 0;
00117
00123 virtual bool isType(const char*) = 0;
00124
00132 virtual void typeName(int32_t prefix, const char* name, int range) = 0;
00133
00139 virtual void typeStruct(int32_t prefix, uint32_t fields) = 0;
00140
00147 virtual void structField(const char* name, uint32_t dim) = 0;
00148
00153 virtual void structFieldEnd() = 0;
00154
00160 virtual void declTypeDef(const char* name, uint32_t dim) = 0;
00161
00166 virtual void declTypeDefEnd() = 0;
00167
00171 virtual void declVar(const char* name, uint32_t dim, bool init) = 0;
00172
00177 virtual void declVarEnd() = 0;
00178 virtual void declInitialiserList(uint32_t num) = 0;
00179 virtual void declFieldInit(const char* name) = 0;
00180
00185 virtual void declProgress(bool hasGuard) = 0;
00186
00187
00188
00189
00190 virtual void declParameter(const char* name, bool reference, uint32_t dim) = 0;
00191
00192 virtual void declParameterEnd() = 0;
00193
00194 virtual void declFuncBegin(const char* name, uint32_t n) = 0;
00195 virtual void declFuncEnd() = 0;
00196
00197
00198
00199
00200 virtual void procTemplateSet(const char *name) = 0;
00201 virtual void procBegin(const char* name, uint32_t m, uint32_t n) = 0;
00202 virtual void procEnd() = 0;
00203 virtual void procState(const char* name, bool hasInvariant) = 0;
00204 virtual void procStateCommit(const char* name) = 0;
00205 virtual void procStateUrgent(const char* name) = 0;
00206 virtual void procStateWinning(const char* name) = 0;
00207 virtual void procStateLosing(const char* name) = 0;
00208 virtual void procStateInit(const char* name) = 0;
00209 virtual void procEdgeBegin(const char* from, const char* to, const bool control) = 0;
00210 virtual void procEdgeEnd(const char* from, const char* to) = 0;
00211 virtual void procSelect(const char * id) = 0;
00212 virtual void procGuard() = 0;
00213 virtual void procSync(Constants::synchronisation_t type) = 0;
00214 virtual void procUpdate() = 0;
00215
00216
00217
00218
00219 virtual void blockBegin() = 0;
00220 virtual void blockEnd() = 0;
00221 virtual void emptyStatement() = 0;
00222 virtual void forBegin() = 0;
00223 virtual void forEnd() = 0;
00224 virtual void iterationBegin(const char *name) = 0;
00225 virtual void iterationEnd(const char *name) = 0;
00226 virtual void whileBegin() = 0;
00227 virtual void whileEnd() = 0;
00228 virtual void doWhileBegin() = 0;
00229 virtual void doWhileEnd() = 0;
00230 virtual void ifBegin() = 0;
00231 virtual void ifElse() = 0;
00232 virtual void ifEnd(bool) = 0;
00233 virtual void breakStatement() = 0;
00234 virtual void continueStatement() = 0;
00235 virtual void switchBegin() = 0;
00236 virtual void switchEnd() = 0;
00237 virtual void caseBegin() = 0;
00238 virtual void caseEnd() = 0;
00239 virtual void defaultBegin() = 0;
00240 virtual void defaultEnd() = 0;
00241 virtual void exprStatement() = 0;
00242 virtual void returnStatement(bool) = 0;
00243
00244
00245
00246
00247 virtual void exprFalse() = 0;
00248 virtual void exprTrue() = 0;
00249 virtual void exprId(const char * varName) = 0;
00250 virtual void exprNat(int32_t) = 0;
00251 virtual void exprCallBegin() = 0;
00252 virtual void exprCallEnd(uint32_t n) = 0;
00253 virtual void exprArg(uint32_t n) = 0;
00254 virtual void exprArray() = 0;
00255 virtual void exprPostIncrement() = 0;
00256 virtual void exprPreIncrement() = 0;
00257 virtual void exprPostDecrement() = 0;
00258 virtual void exprPreDecrement() = 0;
00259 virtual void exprAssignment(Constants::kind_t op) = 0;
00260 virtual void exprUnary(Constants::kind_t unaryop) = 0;
00261 virtual void exprBinary(Constants::kind_t binaryop) = 0;
00262 virtual void exprInlineIf() = 0;
00263 virtual void exprComma() = 0;
00264 virtual void exprDot(const char *) = 0;
00265 virtual void exprDeadlock() = 0;
00266 virtual void exprForAllBegin(const char *name) = 0;
00267 virtual void exprForAllEnd(const char *name) = 0;
00268
00269
00270
00271
00272 virtual void instantiationBegin(const char* id, const char* templ) = 0;
00273 virtual void instantiationEnd(const char* id, const char* templ, uint32_t n) = 0;
00274 virtual void process(const char*) = 0;
00275 virtual void done() = 0;
00276
00277
00278
00279
00280 virtual void quit() {}
00281 virtual void property(Constants::kind_t kind, int line) {}
00282
00283
00284
00285
00286 virtual void beforeUpdate() = 0;
00287 virtual void afterUpdate() = 0;
00288
00289
00290
00291
00292 virtual void lowPriority(const char*) = 0;
00293 virtual void samePriority(const char*) = 0;
00294 virtual void higherPriority(const char*) = 0;
00295 };
00296 }
00297
00305 int32_t parseXTA(FILE *, UTAP::ParserBuilder *, UTAP::ErrorHandler *,
00306 bool newxta);
00307
00315 int32_t parseXTA(const char*, UTAP::ParserBuilder *, UTAP::ErrorHandler *,
00316 bool newxta, UTAP::xta_part_t part = UTAP::S_XTA);
00317
00325 int32_t parseXMLBuffer(const char *buffer, UTAP::ParserBuilder *,
00326 UTAP::ErrorHandler *, bool newxta);
00327
00336 int32_t parseXMLFile(const char *filename, UTAP::ParserBuilder *,
00337 UTAP::ErrorHandler *, bool newxta);
00338
00344 int32_t parseProperty(const char *str,
00345 UTAP::ParserBuilder *aParserBuilder,
00346 UTAP::ErrorHandler *);
00347
00352 int32_t parseProperty(FILE *, UTAP::ParserBuilder *aParserBuilder,
00353 UTAP::ErrorHandler *);
00354
00355
00356 #endif