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 {
00033 class TypeException : public std::exception
00034 {
00035 private:
00036 char _what[256];
00037 public:
00038 TypeException(const char *fmt, ...);
00039 const char *what() const throw ();
00040 };
00041
00042 std::ostream& operator <<(std::ostream& out, const TypeException& exc);
00043
00044 class ParserBuilder
00045 {
00046 public:
00047
00048
00049
00050 static const uint32_t PREFIX_NONE = 0;
00051 static const uint32_t PREFIX_CONST = 1;
00052 static const uint32_t PREFIX_URGENT = 2;
00053 static const uint32_t PREFIX_BROADCAST = 4;
00054 static const uint32_t PREFIX_URGENT_BROADCAST =
00055 PREFIX_URGENT | PREFIX_BROADCAST;
00056
00057 virtual ~ParserBuilder() {}
00058
00059 virtual void setErrorHandler(ErrorHandler *) = 0;
00060 virtual void setPosition(const position_t &) = 0;
00061
00062
00063
00064
00065 virtual bool isType(const char*) = 0;
00066
00067
00068
00069
00070 virtual void declType(uint32_t prefix, const char* name, bool range) = 0;
00071
00072 virtual void declStruct(uint32_t prefix, uint32_t fields) = 0;
00073 virtual void declField(const char* name, uint32_t dim) = 0;
00074
00075 virtual void declFieldEnd() = 0;
00076 virtual void declTypeDef(const char* name, uint32_t dim) = 0;
00077
00078 virtual void declTypeDefEnd() = 0;
00079
00080
00081
00082
00083 virtual void declVar(const char* name, uint32_t dim, bool init) = 0;
00084
00085 virtual void declVarEnd() = 0;
00086 virtual void declInitialiserList(uint32_t num) = 0;
00087 virtual void declFieldInit(const char* name) = 0;
00088
00089
00090
00091
00092 virtual void declParameter(const char* name, bool reference, uint32_t dim) = 0;
00093
00094 virtual void declParameterEnd() = 0;
00095
00096 virtual void declFuncBegin(const char* name, uint32_t n) = 0;
00097 virtual void declFuncEnd() = 0;
00098
00099
00100
00101
00102 virtual void procBegin(const char* name, uint32_t n) = 0;
00103 virtual void procEnd() = 0;
00104 virtual void procState(const char* name, bool hasInvariant) = 0;
00105 virtual void procStateCommit(const char* name) = 0;
00106 virtual void procStateUrgent(const char* name) = 0;
00107 virtual void procStateInit(const char* name) = 0;
00108 virtual void procTransition(const char* from, const char* to) = 0;
00109 virtual void procGuard() = 0;
00110 virtual void procSync(Constants::synchronisation_t type) = 0;
00111 virtual void procUpdate() = 0;
00112
00113
00114
00115
00116 virtual void blockBegin() = 0;
00117 virtual void blockEnd() = 0;
00118 virtual void emptyStatement() = 0;
00119 virtual void forBegin() = 0;
00120 virtual void forEnd() = 0;
00121 virtual void whileBegin() = 0;
00122 virtual void whileEnd() = 0;
00123 virtual void doWhileBegin() = 0;
00124 virtual void doWhileEnd() = 0;
00125 virtual void ifBegin() = 0;
00126 virtual void ifElse() = 0;
00127 virtual void ifEnd(bool) = 0;
00128 virtual void breakStatement() = 0;
00129 virtual void continueStatement() = 0;
00130 virtual void switchBegin() = 0;
00131 virtual void switchEnd() = 0;
00132 virtual void caseBegin() = 0;
00133 virtual void caseEnd() = 0;
00134 virtual void defaultBegin() = 0;
00135 virtual void defaultEnd() = 0;
00136 virtual void exprStatement() = 0;
00137 virtual void returnStatement(bool) = 0;
00138
00139
00140
00141
00142 virtual void exprFalse() = 0;
00143 virtual void exprTrue() = 0;
00144 virtual void exprId(const char * varName) = 0;
00145 virtual void exprNat(int32_t) = 0;
00146 virtual void exprCallBegin(const char * functionName) = 0;
00147 virtual void exprCallEnd(uint32_t n) = 0;
00148 virtual void exprArg(uint32_t n) = 0;
00149 virtual void exprArray() = 0;
00150 virtual void exprPostIncrement() = 0;
00151 virtual void exprPreIncrement() = 0;
00152 virtual void exprPostDecrement() = 0;
00153 virtual void exprPreDecrement() = 0;
00154 virtual void exprAssignment(Constants::kind_t op) = 0;
00155 virtual void exprUnary(Constants::kind_t unaryop) = 0;
00156 virtual void exprBinary(Constants::kind_t binaryop) = 0;
00157 virtual void exprInlineIf() = 0;
00158 virtual void exprComma() = 0;
00159 virtual void exprDot(const char *) = 0;
00160 virtual void exprDeadlock() = 0;
00161
00162
00163
00164
00165 virtual void instantiationBegin(const char* id, const char* templ) = 0;
00166 virtual void instantiationEnd(const char* id, const char* templ, uint32_t n) = 0;
00167 virtual void process(const char*) = 0;
00168 virtual void done() = 0;
00169
00170
00171
00172
00173 virtual void quit() {}
00174 virtual void property(Constants::kind_t kind, int line) {}
00175
00176
00177
00178
00179 virtual void beforeUpdate() = 0;
00180 virtual void afterUpdate() = 0;
00181 };
00182 }
00183
00184
00185
00186
00187
00188
00189 int32_t parseXTA(FILE *, UTAP::ParserBuilder *, UTAP::ErrorHandler *,
00190 bool newxta);
00191 int32_t parseXTA(const char*, UTAP::ParserBuilder *, UTAP::ErrorHandler *,
00192 bool newxta);
00193 int32_t parseXMLBuffer(const char *buffer, UTAP::ParserBuilder *,
00194 UTAP::ErrorHandler *, bool newxta);
00195 int32_t parseXMLFile(const char *filename, UTAP::ParserBuilder *,
00196 UTAP::ErrorHandler *, bool newxta);
00197 int32_t parseProperty(const char *str,
00198 UTAP::ParserBuilder *aParserBuilder,
00199 UTAP::ErrorHandler *);
00200 int32_t parseProperty(FILE *, UTAP::ParserBuilder *aParserBuilder,
00201 UTAP::ErrorHandler *);
00202
00203 #endif