Main Page | Namespace List | Class Hierarchy | Compound List | File List | Namespace Members | Compound 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 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 {
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      * Prefixes
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      * Query functions
00064      */
00065     virtual bool isType(const char*) = 0;
00066 
00067     /********************************************************************
00068      * Types
00069      */
00070     virtual void declType(uint32_t prefix, const char* name, bool range) = 0;
00071     // 2 expr if range==true
00072     virtual void declStruct(uint32_t prefix, uint32_t fields) = 0;
00073     virtual void declField(const char* name, uint32_t dim) = 0; 
00074     // 1 type and dim array sizes
00075     virtual void declFieldEnd() = 0;
00076     virtual void declTypeDef(const char* name, uint32_t dim) = 0; 
00077     // 1 type and dim array sizes
00078     virtual void declTypeDefEnd() = 0;
00079 
00080     /********************************************************************
00081      * Variable declarations
00082      */
00083     virtual void declVar(const char* name, uint32_t dim, bool init) = 0; 
00084     // 1 type, dims, initializer if init==true
00085     virtual void declVarEnd() = 0;
00086     virtual void declInitialiserList(uint32_t num) = 0; // n initialisers
00087     virtual void declFieldInit(const char* name) = 0; // 1 initialiser
00088   
00089     /********************************************************************
00090      * Function declarations
00091      */
00092     virtual void declParameter(const char* name, bool reference, uint32_t dim) = 0;
00093     // 1 type, dim array sizes
00094     virtual void declParameterEnd() = 0; // pop parameter type
00095   
00096     virtual void declFuncBegin(const char* name, uint32_t n) = 0; // n paramaters
00097     virtual void declFuncEnd() = 0; // 1 block
00098 
00099     /********************************************************************
00100      * Process declarations
00101      */
00102     virtual void procBegin(const char* name, uint32_t n) = 0; // n parameters
00103     virtual void procEnd() = 0; // 1 ProcBody
00104     virtual void procState(const char* name, bool hasInvariant) = 0; // 1 expr
00105     virtual void procStateCommit(const char* name) = 0; // mark previously decl. state
00106     virtual void procStateUrgent(const char* name) = 0; // mark previously decl. state
00107     virtual void procStateInit(const char* name) = 0; // mark previously decl. state
00108     virtual void procTransition(const char* from, const char* to) = 0; 
00109     virtual void procGuard() = 0; // 1 expr
00110     virtual void procSync(Constants::synchronisation_t type) = 0; // 1 expr
00111     virtual void procUpdate() = 0; // 1 expr
00112 
00113     /*********************************************************************
00114      * Statements
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; // 3 expr, 1 stat
00121     virtual void whileBegin() = 0;
00122     virtual void whileEnd() = 0; // 1 expr, 1 stat
00123     virtual void doWhileBegin() = 0;
00124     virtual void doWhileEnd() = 0; // 1 stat, 1 expr
00125     virtual void ifBegin() = 0;
00126     virtual void ifElse() = 0;
00127     virtual void ifEnd(bool) = 0; // 1 expr, 1 or 2 statements
00128     virtual void breakStatement() = 0;
00129     virtual void continueStatement() = 0;
00130     virtual void switchBegin() = 0;
00131     virtual void switchEnd() = 0; // 1 expr, 1+ case/default
00132     virtual void caseBegin() = 0;
00133     virtual void caseEnd() = 0;  // 1 expr, 0+ stat
00134     virtual void defaultBegin() = 0;
00135     virtual void defaultEnd() = 0; // 0+ statements
00136     virtual void exprStatement() = 0; // 1 expr
00137     virtual void returnStatement(bool) = 0; // 1 expr if argument is true
00138 
00139     /********************************************************************
00140      * Expressions
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; // natural number
00146     virtual void exprCallBegin(const char * functionName) = 0;
00147     virtual void exprCallEnd(uint32_t n) = 0; // n exprs as arguments
00148     virtual void exprArg(uint32_t n) = 0; // 1 expr for n-th fn call argument
00149     virtual void exprArray() = 0; // 2 expr 
00150     virtual void exprPostIncrement() = 0; // 1 expr
00151     virtual void exprPreIncrement() = 0; // 1 expr
00152     virtual void exprPostDecrement() = 0; // 1 expr
00153     virtual void exprPreDecrement() = 0; // 1 expr
00154     virtual void exprAssignment(Constants::kind_t op) = 0; // 2 expr
00155     virtual void exprUnary(Constants::kind_t unaryop) = 0; // 1 expr
00156     virtual void exprBinary(Constants::kind_t binaryop) = 0; // 2 expr
00157     virtual void exprInlineIf() = 0; // 3 expr
00158     virtual void exprComma() = 0; // 2 expr
00159     virtual void exprDot(const char *) = 0; // 1 expr
00160     virtual void exprDeadlock() = 0;
00161 
00162     /********************************************************************
00163      * System declaration
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; // n arguments
00167     virtual void process(const char*) = 0;
00168     virtual void done() = 0; // marks the end of the file
00169 
00170     /********************************************************************
00171      * Properties
00172      */
00173     virtual void quit() {}
00174     virtual void property(Constants::kind_t kind, int line) {}
00175 
00176     /********************************************************************
00177      * Guiding
00178      */
00179     virtual void beforeUpdate() = 0;
00180     virtual void afterUpdate() = 0;
00181   };
00182 }
00183 
00184 /*************************************************************************
00185  * Parse system definition.
00186  * Returns >=0 (success, ended with data specific code). 
00187  * Returns -1 (failure). 
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

Generated on Wed Jul 2 12:08:18 2003 for libutap by doxygen 1.3.2