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.hh"
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
00101 virtual ~ParserBuilder() {}
00102
00108
virtual void setErrorHandler(
ErrorHandler *) = 0;
00109
00115
virtual void setPosition(
const position_t &) = 0;
00116
00122
virtual bool isType(
const char*) = 0;
00123
00131
virtual void typeName(int32_t prefix,
const char* name,
bool range) = 0;
00132
00138
virtual void typeStruct(int32_t prefix, uint32_t fields) = 0;
00139
00146
virtual void structField(
const char* name, uint32_t dim) = 0;
00147
00152
virtual void structFieldEnd() = 0;
00153
00159
virtual void declTypeDef(
const char* name, uint32_t dim) = 0;
00160
00165
virtual void declTypeDefEnd() = 0;
00166
00170
virtual void declVar(
const char* name, uint32_t dim,
bool init) = 0;
00171
00176
virtual void declVarEnd() = 0;
00177
virtual void declInitialiserList(uint32_t num) = 0;
00178
virtual void declFieldInit(
const char* name) = 0;
00179
00180
00181
00182
00183
virtual void declParameter(
const char* name,
bool reference, uint32_t dim) = 0;
00184
00185
virtual void declParameterEnd() = 0;
00186
00187
virtual void declFuncBegin(
const char* name, uint32_t n) = 0;
00188
virtual void declFuncEnd() = 0;
00189
00190
00191
00192
00193
virtual void procBegin(
const char* name, uint32_t n) = 0;
00194
virtual void procEnd() = 0;
00195
virtual void procState(
const char* name,
bool hasInvariant) = 0;
00196
virtual void procStateCommit(
const char* name) = 0;
00197
virtual void procStateUrgent(
const char* name) = 0;
00198
virtual void procStateInit(
const char* name) = 0;
00199
virtual void procTransition(
const char* from,
const char* to) = 0;
00200
virtual void procGuard() = 0;
00201
virtual void procSync(Constants::synchronisation_t type) = 0;
00202
virtual void procUpdate() = 0;
00203
00204
00205
00206
00207
virtual void blockBegin() = 0;
00208
virtual void blockEnd() = 0;
00209
virtual void emptyStatement() = 0;
00210
virtual void forBegin() = 0;
00211
virtual void forEnd() = 0;
00212
virtual void whileBegin() = 0;
00213
virtual void whileEnd() = 0;
00214
virtual void doWhileBegin() = 0;
00215
virtual void doWhileEnd() = 0;
00216
virtual void ifBegin() = 0;
00217
virtual void ifElse() = 0;
00218
virtual void ifEnd(
bool) = 0;
00219
virtual void breakStatement() = 0;
00220
virtual void continueStatement() = 0;
00221
virtual void switchBegin() = 0;
00222
virtual void switchEnd() = 0;
00223
virtual void caseBegin() = 0;
00224
virtual void caseEnd() = 0;
00225
virtual void defaultBegin() = 0;
00226
virtual void defaultEnd() = 0;
00227
virtual void exprStatement() = 0;
00228
virtual void returnStatement(
bool) = 0;
00229
00230
00231
00232
00233
virtual void exprFalse() = 0;
00234
virtual void exprTrue() = 0;
00235
virtual void exprId(
const char * varName) = 0;
00236
virtual void exprNat(int32_t) = 0;
00237
virtual void exprCallBegin(
const char * functionName) = 0;
00238
virtual void exprCallEnd(uint32_t n) = 0;
00239
virtual void exprArg(uint32_t n) = 0;
00240
virtual void exprArray() = 0;
00241
virtual void exprPostIncrement() = 0;
00242
virtual void exprPreIncrement() = 0;
00243
virtual void exprPostDecrement() = 0;
00244
virtual void exprPreDecrement() = 0;
00245
virtual void exprAssignment(Constants::kind_t op) = 0;
00246
virtual void exprUnary(Constants::kind_t unaryop) = 0;
00247
virtual void exprBinary(Constants::kind_t binaryop) = 0;
00248
virtual void exprInlineIf() = 0;
00249
virtual void exprComma() = 0;
00250
virtual void exprDot(
const char *) = 0;
00251
virtual void exprDeadlock() = 0;
00252
00253
00254
00255
00256
virtual void instantiationBegin(
const char*
id,
const char* templ) = 0;
00257
virtual void instantiationEnd(
const char*
id,
const char* templ, uint32_t n) = 0;
00258
virtual void process(
const char*) = 0;
00259
virtual void done() = 0;
00260
00261
00262
00263
00264 virtual void quit() {}
00265 virtual void property(Constants::kind_t kind,
int line) {}
00266
00267
00268
00269
00270
virtual void beforeUpdate() = 0;
00271
virtual void afterUpdate() = 0;
00272 };
00273 }
00274
00282 int32_t
parseXTA(FILE *,
UTAP::ParserBuilder *,
UTAP::ErrorHandler *,
00283
bool newxta);
00284
00292 int32_t
parseXTA(
const char*,
UTAP::ParserBuilder *,
UTAP::ErrorHandler *,
00293
bool newxta);
00294
00302 int32_t
parseXMLBuffer(
const char *buffer,
UTAP::ParserBuilder *,
00303
UTAP::ErrorHandler *,
bool newxta);
00304
00313 int32_t
parseXMLFile(
const char *filename,
UTAP::ParserBuilder *,
00314
UTAP::ErrorHandler *,
bool newxta);
00315
00321 int32_t
parseProperty(
const char *str,
00322
UTAP::ParserBuilder *aParserBuilder,
00323
UTAP::ErrorHandler *);
00324
00329 int32_t
parseProperty(FILE *,
UTAP::ParserBuilder *aParserBuilder,
00330
UTAP::ErrorHandler *);
00331
00332
00333
#endif