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 procBegin(const char* name, uint32_t n) = 0;
00201 virtual void procEnd() = 0;
00202 virtual void procState(const char* name, bool hasInvariant) = 0;
00203 virtual void procStateCommit(const char* name) = 0;
00204 virtual void procStateUrgent(const char* name) = 0;
00205 virtual void procStateInit(const char* name) = 0;
00206 virtual void procEdge(const char* from, const char* to) = 0;
00207 virtual void procGuard() = 0;
00208 virtual void procSync(Constants::synchronisation_t type) = 0;
00209 virtual void procUpdate() = 0;
00210
00211
00212
00213
00214 virtual void blockBegin() = 0;
00215 virtual void blockEnd() = 0;
00216 virtual void emptyStatement() = 0;
00217 virtual void forBegin() = 0;
00218 virtual void forEnd() = 0;
00219 virtual void whileBegin() = 0;
00220 virtual void whileEnd() = 0;
00221 virtual void doWhileBegin() = 0;
00222 virtual void doWhileEnd() = 0;
00223 virtual void ifBegin() = 0;
00224 virtual void ifElse() = 0;
00225 virtual void ifEnd(bool) = 0;
00226 virtual void breakStatement() = 0;
00227 virtual void continueStatement() = 0;
00228 virtual void switchBegin() = 0;
00229 virtual void switchEnd() = 0;
00230 virtual void caseBegin() = 0;
00231 virtual void caseEnd() = 0;
00232 virtual void defaultBegin() = 0;
00233 virtual void defaultEnd() = 0;
00234 virtual void exprStatement() = 0;
00235 virtual void returnStatement(bool) = 0;
00236
00237
00238
00239
00240 virtual void exprFalse() = 0;
00241 virtual void exprTrue() = 0;
00242 virtual void exprId(const char * varName) = 0;
00243 virtual void exprNat(int32_t) = 0;
00244 virtual void exprCallBegin(const char * functionName) = 0;
00245 virtual void exprCallEnd(uint32_t n) = 0;
00246 virtual void exprArg(uint32_t n) = 0;
00247 virtual void exprArray() = 0;
00248 virtual void exprPostIncrement() = 0;
00249 virtual void exprPreIncrement() = 0;
00250 virtual void exprPostDecrement() = 0;
00251 virtual void exprPreDecrement() = 0;
00252 virtual void exprAssignment(Constants::kind_t op) = 0;
00253 virtual void exprUnary(Constants::kind_t unaryop) = 0;
00254 virtual void exprBinary(Constants::kind_t binaryop) = 0;
00255 virtual void exprInlineIf() = 0;
00256 virtual void exprComma() = 0;
00257 virtual void exprDot(const char *) = 0;
00258 virtual void exprDeadlock() = 0;
00259
00260
00261
00262
00263 virtual void instantiationBegin(const char* id, const char* templ) = 0;
00264 virtual void instantiationEnd(const char* id, const char* templ, uint32_t n) = 0;
00265 virtual void process(const char*) = 0;
00266 virtual void done() = 0;
00267
00268
00269
00270
00271 virtual void quit() {}
00272 virtual void property(Constants::kind_t kind, int line) {}
00273
00274
00275
00276
00277 virtual void beforeUpdate() = 0;
00278 virtual void afterUpdate() = 0;
00279
00280
00281
00282
00283 virtual void lowPriority(const char*) = 0;
00284 virtual void samePriority(const char*) = 0;
00285 virtual void higherPriority(const char*) = 0;
00286 };
00287 }
00288
00296 int32_t parseXTA(FILE *, UTAP::ParserBuilder *, UTAP::ErrorHandler *,
00297 bool newxta);
00298
00306 int32_t parseXTA(const char*, UTAP::ParserBuilder *, UTAP::ErrorHandler *,
00307 bool newxta, UTAP::xta_part_t part = UTAP::S_XTA);
00308
00316 int32_t parseXMLBuffer(const char *buffer, UTAP::ParserBuilder *,
00317 UTAP::ErrorHandler *, bool newxta);
00318
00327 int32_t parseXMLFile(const char *filename, UTAP::ParserBuilder *,
00328 UTAP::ErrorHandler *, bool newxta);
00329
00335 int32_t parseProperty(const char *str,
00336 UTAP::ParserBuilder *aParserBuilder,
00337 UTAP::ErrorHandler *);
00338
00343 int32_t parseProperty(FILE *, UTAP::ParserBuilder *aParserBuilder,
00344 UTAP::ErrorHandler *);
00345
00346
00347 #endif