Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

builder.hh

Go to the documentation of this file.
00001 // -*- mode: C++; c-file-style: "stroustrup"; c-basic-offset: 4; -*- 00002 00003 /* libutap - Uppaal Timed Automata Parser. 00004 Copyright (C) 2002-2003 Uppsala University and Aalborg University. 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Lesser General Public License 00008 as published by the Free Software Foundation; either version 2.1 of 00009 the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, but 00012 WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Lesser General Public License for more details. 00015 00016 You should have received a copy of the GNU Lesser General Public 00017 License along with this library; if not, write to the Free Software 00018 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00019 USA 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 * Prefixes 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; // n initialisers 00178 virtual void declFieldInit(const char* name) = 0; // 1 initialiser 00179 00180 /******************************************************************** 00181 * Function declarations 00182 */ 00183 virtual void declParameter(const char* name, bool reference, uint32_t dim) = 0; 00184 // 1 type, dim array sizes 00185 virtual void declParameterEnd() = 0; // pop parameter type 00186 00187 virtual void declFuncBegin(const char* name, uint32_t n) = 0; // n paramaters 00188 virtual void declFuncEnd() = 0; // 1 block 00189 00190 /******************************************************************** 00191 * Process declarations 00192 */ 00193 virtual void procBegin(const char* name, uint32_t n) = 0; // n parameters 00194 virtual void procEnd() = 0; // 1 ProcBody 00195 virtual void procState(const char* name, bool hasInvariant) = 0; // 1 expr 00196 virtual void procStateCommit(const char* name) = 0; // mark previously decl. state 00197 virtual void procStateUrgent(const char* name) = 0; // mark previously decl. state 00198 virtual void procStateInit(const char* name) = 0; // mark previously decl. state 00199 virtual void procTransition(const char* from, const char* to) = 0; 00200 virtual void procGuard() = 0; // 1 expr 00201 virtual void procSync(Constants::synchronisation_t type) = 0; // 1 expr 00202 virtual void procUpdate() = 0; // 1 expr 00203 00204 /********************************************************************* 00205 * Statements 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; // 3 expr, 1 stat 00212 virtual void whileBegin() = 0; 00213 virtual void whileEnd() = 0; // 1 expr, 1 stat 00214 virtual void doWhileBegin() = 0; 00215 virtual void doWhileEnd() = 0; // 1 stat, 1 expr 00216 virtual void ifBegin() = 0; 00217 virtual void ifElse() = 0; 00218 virtual void ifEnd(bool) = 0; // 1 expr, 1 or 2 statements 00219 virtual void breakStatement() = 0; 00220 virtual void continueStatement() = 0; 00221 virtual void switchBegin() = 0; 00222 virtual void switchEnd() = 0; // 1 expr, 1+ case/default 00223 virtual void caseBegin() = 0; 00224 virtual void caseEnd() = 0; // 1 expr, 0+ stat 00225 virtual void defaultBegin() = 0; 00226 virtual void defaultEnd() = 0; // 0+ statements 00227 virtual void exprStatement() = 0; // 1 expr 00228 virtual void returnStatement(bool) = 0; // 1 expr if argument is true 00229 00230 /******************************************************************** 00231 * Expressions 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; // natural number 00237 virtual void exprCallBegin(const char * functionName) = 0; 00238 virtual void exprCallEnd(uint32_t n) = 0; // n exprs as arguments 00239 virtual void exprArg(uint32_t n) = 0; // 1 expr for n-th fn call argument 00240 virtual void exprArray() = 0; // 2 expr 00241 virtual void exprPostIncrement() = 0; // 1 expr 00242 virtual void exprPreIncrement() = 0; // 1 expr 00243 virtual void exprPostDecrement() = 0; // 1 expr 00244 virtual void exprPreDecrement() = 0; // 1 expr 00245 virtual void exprAssignment(Constants::kind_t op) = 0; // 2 expr 00246 virtual void exprUnary(Constants::kind_t unaryop) = 0; // 1 expr 00247 virtual void exprBinary(Constants::kind_t binaryop) = 0; // 2 expr 00248 virtual void exprInlineIf() = 0; // 3 expr 00249 virtual void exprComma() = 0; // 2 expr 00250 virtual void exprDot(const char *) = 0; // 1 expr 00251 virtual void exprDeadlock() = 0; 00252 00253 /******************************************************************** 00254 * System declaration 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; // n arguments 00258 virtual void process(const char*) = 0; 00259 virtual void done() = 0; // marks the end of the file 00260 00261 /******************************************************************** 00262 * Properties 00263 */ 00264 virtual void quit() {} 00265 virtual void property(Constants::kind_t kind, int line) {} 00266 00267 /******************************************************************** 00268 * Guiding 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

Generated on Sat May 15 12:33:40 2004 for libutap by doxygen 1.3.7