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

abstractbuilder.h

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_ABSTRACTBUILDER_HH
00023 #define UTAP_ABSTRACTBUILDER_HH
00024 
00025 #include <exception>
00026 #include <string>
00027 
00028 #include "builder.h"
00029 #include "utap.h"
00030 
00031 namespace UTAP
00032 {
00033     class NotSupportedException : public std::exception 
00034     {
00035     private:
00036         std::string error;
00037     public:
00038         NotSupportedException(const char *err) { error = err; }
00039         virtual ~NotSupportedException() throw() {}
00040         virtual const char* what() const throw() { return error.c_str(); }
00041     };
00042 
00043     class AbstractBuilder : public ParserBuilder
00044     {
00045     protected:
00046         /* A pointer to the error handler */
00047         ErrorHandler *errorHandler;
00048 
00049         position_t position;
00050     public:
00051         AbstractBuilder();
00052 
00053         virtual void setErrorHandler(ErrorHandler *);
00054         virtual void setPosition(const position_t &);
00055 
00056         /************************************************************
00057          * Query functions
00058          */
00059         virtual bool isType(const char*);
00060         virtual bool isLocation(const char*);
00061 
00062         /************************************************************
00063          * Types
00064          */
00065         virtual void typeName(int32_t prefix, const char* name, int range);
00066         // 2 expr if range==true
00067         virtual void typeStruct(int32_t prefix, uint32_t fields);
00068 
00069         virtual void structField(const char* name, uint32_t dim); 
00070         // 1 type and dim array sizes
00071         virtual void structFieldEnd();
00072 
00073         virtual void declTypeDef(const char* name, uint32_t dim); 
00074         // 1 type and dim array sizes
00075         virtual void declTypeDefEnd();
00076 
00077         /************************************************************
00078          * Variable declarations
00079          */
00080         virtual void declVar(const char* name, uint32_t dim, bool init); 
00081         // 1 type, dims, initializer if init==true
00082         virtual void declVarEnd();
00083         virtual void declInitialiserList(uint32_t num); // n initialisers
00084         virtual void declFieldInit(const char* name); // 1 initialiser
00085 
00086         /************************************************************
00087          * Progress measure declarations
00088          */
00089         virtual void declProgress(bool);
00090         
00091         /************************************************************
00092          * Function declarations
00093          */
00094         virtual void declParameter(const char* name, bool reference, uint32_t dim);
00095         // 1 type, dim array sizes
00096         virtual void declParameterEnd(); // pop parameter type
00097     
00098         virtual void declFuncBegin(const char* name, uint32_t n); // n paramaters
00099         virtual void declFuncEnd(); // 1 block
00100 
00101         /************************************************************
00102          * Process declarations
00103          */
00104         virtual void procTemplateSet(const char *name);
00105         virtual void procBegin(const char* name, uint32_t n, uint32_t m);
00106         virtual void procEnd(); // 1 ProcBody
00107         virtual void procState(const char* name, bool hasInvariant); // 1 expr
00108         virtual void procStateCommit(const char* name); // mark previously decl. state
00109         virtual void procStateUrgent(const char* name); // mark previously decl. state
00110         virtual void procStateWinning(const char* name); // mark previously decl. state
00111         virtual void procStateLosing(const char* name); // mark previously decl. state
00112         virtual void procStateInit(const char* name); // mark previously decl. state
00113         virtual void procEdgeBegin(const char* from, const char* to, const bool control);
00114         virtual void procEdgeEnd(const char* from, const char* to); 
00115         // 1 epxr,1sync,1expr
00116         virtual void procSelect(const char *id);
00117         virtual void procGuard();
00118         virtual void procSync(Constants::synchronisation_t type); // 1 expr
00119         virtual void procUpdate();
00120     
00121         /************************************************************
00122          * Statements
00123          */
00124         virtual void blockBegin();
00125         virtual void blockEnd();
00126         virtual void emptyStatement();
00127         virtual void forBegin(); // 3 expr
00128         virtual void forEnd(); // 1 stat
00129         virtual void iterationBegin(const char *name); // 1 id, 1 type
00130         virtual void iterationEnd(const char *name); // 1 stat
00131         virtual void whileBegin();
00132         virtual void whileEnd(); // 1 expr, 1 stat
00133         virtual void doWhileBegin();
00134         virtual void doWhileEnd(); // 1 stat, 1 expr
00135         virtual void ifBegin();
00136         virtual void ifElse();
00137         virtual void ifEnd(bool); // 1 expr, 1 or 2 statements
00138         virtual void breakStatement();
00139         virtual void continueStatement();
00140         virtual void switchBegin();
00141         virtual void switchEnd(); // 1 expr, 1+ case/default
00142         virtual void caseBegin();
00143         virtual void caseEnd();  // 1 expr, 0+ stat
00144         virtual void defaultBegin();
00145         virtual void defaultEnd(); // 0+ statements
00146         virtual void exprStatement(); // 1 expr
00147         virtual void returnStatement(bool); // 1 expr if argument is true
00148     
00149         /************************************************************
00150          * Expressions
00151          */
00152         virtual void exprTrue();
00153         virtual void exprFalse();
00154         virtual void exprId(const char * varName);
00155         virtual void exprNat(int32_t); // natural number
00156         virtual void exprCallBegin();
00157         virtual void exprCallEnd(uint32_t n); // n exprs as arguments
00158         virtual void exprArg(uint32_t n); // 1 exprs as n-th argument for fn-call
00159         virtual void exprArray(); // 2 expr 
00160         virtual void exprPostIncrement(); // 1 expr
00161         virtual void exprPreIncrement(); // 1 expr
00162         virtual void exprPostDecrement(); // 1 expr
00163         virtual void exprPreDecrement(); // 1 expr
00164         virtual void exprAssignment(Constants::kind_t op); // 2 expr
00165         virtual void exprUnary(Constants::kind_t unaryop); // 1 expr
00166         virtual void exprBinary(Constants::kind_t binaryop); // 2 expr
00167         virtual void exprInlineIf(); // 3 expr
00168         virtual void exprComma(); // 2 expr
00169         virtual void exprDot(const char *); // 1 expr
00170         virtual void exprDeadlock();
00171         virtual void exprForAllBegin(const char *name);
00172         virtual void exprForAllEnd(const char *name);
00173     
00174         /************************************************************
00175          * System declaration
00176          */
00177         virtual void instantiationBegin(const char*, const char*);
00178         virtual void instantiationEnd(const char *, const char *, uint32_t n); // n arguments
00179         virtual void process(const char*);
00180 
00181         virtual void done();    
00182 
00183         virtual void property(Constants::kind_t, int line);
00184 
00185         /********************************************************************
00186          * Guiding
00187          */
00188 
00189         virtual void beforeUpdate();
00190         virtual void afterUpdate();
00191 
00192 
00193         /********************************************************************
00194          * Priority
00195          */
00196 
00197         virtual void lowPriority(const char*);
00198         virtual void samePriority(const char*);
00199         virtual void higherPriority(const char*);
00200     };
00201 }
00202 #endif

Generated on Thu Nov 10 13:16:12 2005 for libutap by  doxygen 1.4.2