abstractbuilder.h

Go to the documentation of this file.
00001 // -*- mode: C++; c-file-style: "stroustrup"; c-basic-offset: 4; indent-tabs-mode: nil; -*-
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 "utap/builder.h"
00029 #include "utap/utap.h"
00030 #include "utap/position.h"
00031 
00032 namespace UTAP
00033 {
00034     class NotSupportedException : public std::exception 
00035     {
00036     private:
00037         std::string error;
00038     public:
00039         NotSupportedException(const char *err) { error = err; }
00040         virtual ~NotSupportedException() throw() {}
00041         virtual const char* what() const throw() { return error.c_str(); }
00042     };
00043 
00044     class AbstractBuilder : public ParserBuilder
00045     {
00046     protected:
00047         position_t position;
00048     public:
00049         AbstractBuilder();
00050 
00051         virtual void setPosition(uint32_t, uint32_t);
00052 
00053         /************************************************************
00054          * Query functions
00055          */
00056         virtual bool isType(const char*);
00057 
00058         /************************************************************
00059          * Types
00060          */
00061         virtual void typeDuplicate();
00062         virtual void typePop();
00063         virtual void typeBool(PREFIX);
00064         virtual void typeInt(PREFIX);
00065         virtual void typeBoundedInt(PREFIX);
00066         virtual void typeChannel(PREFIX);
00067         virtual void typeClock();
00068         virtual void typeVoid();
00069         virtual void typeScalar(PREFIX);
00070         virtual void typeName(PREFIX, const char* name);
00071         virtual void typeStruct(PREFIX, uint32_t fields);
00072         virtual void typeArrayOfSize(size_t);
00073         virtual void typeArrayOfType(size_t);
00074         virtual void structField(const char* name); 
00075         virtual void declTypeDef(const char* name); 
00076 
00077         /************************************************************
00078          * Variable declarations
00079          */
00080         virtual void declVar(const char* name, bool init); 
00081         virtual void declInitialiserList(uint32_t num); // n initialisers
00082         virtual void declFieldInit(const char* name); // 1 initialiser
00083 
00084         /************************************************************
00085          * Progress measure declarations
00086          */
00087         virtual void declProgress(bool);
00088         
00089         /************************************************************
00090          * Function declarations
00091          */
00092         virtual void declParameter(const char* name, bool);
00093         virtual void declFuncBegin(const char* name); // n paramaters
00094         virtual void declFuncEnd(); // 1 block
00095 
00096         /************************************************************
00097          * Process declarations
00098          */
00099         virtual void procBegin(const char* name);
00100         virtual void procEnd(); // 1 ProcBody
00101         virtual void procState(const char* name, bool hasInvariant); // 1 expr
00102         virtual void procStateCommit(const char* name); // mark previously decl. state
00103         virtual void procStateUrgent(const char* name); // mark previously decl. state
00104         virtual void procStateInit(const char* name); // mark previously decl. state
00105         virtual void procEdgeBegin(const char* from, const char* to, const bool control);
00106         virtual void procEdgeEnd(const char* from, const char* to); 
00107         // 1 epxr,1sync,1expr
00108         virtual void procSelect(const char *id);
00109         virtual void procGuard();
00110         virtual void procSync(Constants::synchronisation_t type); // 1 expr
00111         virtual void procUpdate();
00112     
00113         /************************************************************
00114          * Statements
00115          */
00116         virtual void blockBegin();
00117         virtual void blockEnd();
00118         virtual void emptyStatement();
00119         virtual void forBegin(); // 3 expr
00120         virtual void forEnd(); // 1 stat
00121         virtual void iterationBegin(const char *name); // 1 id, 1 type
00122         virtual void iterationEnd(const char *name); // 1 stat
00123         virtual void whileBegin();
00124         virtual void whileEnd(); // 1 expr, 1 stat
00125         virtual void doWhileBegin();
00126         virtual void doWhileEnd(); // 1 stat, 1 expr
00127         virtual void ifBegin();
00128         virtual void ifElse();
00129         virtual void ifEnd(bool); // 1 expr, 1 or 2 statements
00130         virtual void breakStatement();
00131         virtual void continueStatement();
00132         virtual void switchBegin();
00133         virtual void switchEnd(); // 1 expr, 1+ case/default
00134         virtual void caseBegin();
00135         virtual void caseEnd();  // 1 expr, 0+ stat
00136         virtual void defaultBegin();
00137         virtual void defaultEnd(); // 0+ statements
00138         virtual void exprStatement(); // 1 expr
00139         virtual void returnStatement(bool); // 1 expr if argument is true
00140         virtual void assertStatement();
00141     
00142         /************************************************************
00143          * Expressions
00144          */
00145         virtual void exprTrue();
00146         virtual void exprFalse();
00147         virtual void exprId(const char * varName);
00148         virtual void exprNat(int32_t); // natural number
00149         virtual void exprCallBegin();
00150         virtual void exprCallEnd(uint32_t n); // n exprs as arguments
00151         virtual void exprArray(); // 2 expr 
00152         virtual void exprPostIncrement(); // 1 expr
00153         virtual void exprPreIncrement(); // 1 expr
00154         virtual void exprPostDecrement(); // 1 expr
00155         virtual void exprPreDecrement(); // 1 expr
00156         virtual void exprAssignment(Constants::kind_t op); // 2 expr
00157         virtual void exprUnary(Constants::kind_t unaryop); // 1 expr
00158         virtual void exprBinary(Constants::kind_t binaryop); // 2 expr
00159         virtual void exprTernary(Constants::kind_t ternaryop, bool firstMissing); // 3 expr
00160         virtual void exprInlineIf(); // 3 expr
00161         virtual void exprComma(); // 2 expr
00162         virtual void exprDot(const char *); // 1 expr
00163         virtual void exprDeadlock();
00164         virtual void exprForAllBegin(const char *name);
00165         virtual void exprForAllEnd(const char *name);
00166         virtual void exprExistsBegin(const char *name);
00167         virtual void exprExistsEnd(const char *name);
00168     
00169         /************************************************************
00170          * System declaration
00171          */
00172         virtual void instantiationBegin(const char*, size_t, const char*);
00173         virtual void instantiationEnd(
00174             const char *, size_t, const char *, size_t); 
00175         virtual void process(const char*);
00176         virtual void done();
00177 
00178         /************************************************************
00179          * Properties
00180          */
00181         virtual void property();
00182         virtual void paramProperty(size_t, Constants::kind_t);
00183         virtual void declParamId(const char*);
00184 
00185         /********************************************************************
00186          * Guiding
00187          */
00188         virtual void beforeUpdate();
00189         virtual void afterUpdate();
00190 
00191 
00192         /********************************************************************
00193          * Priority
00194          */
00195         virtual void incProcPriority();
00196         virtual void incChanPriority();
00197         virtual void chanPriority();
00198         virtual void procPriority(const char*);
00199         virtual void defaultChanPriority();
00200 
00201         /********************************************************************
00202          * SSQL
00203          */
00204         virtual void ssQueryBegin();
00205         virtual void ssQueryEnd();
00206     };
00207 }
00208 #endif

Generated on Thu Feb 22 14:46:52 2007 for libutap by  doxygen 1.4.7