builder.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_BUILDER_HH
00023 #define UTAP_BUILDER_HH
00024 
00025 #include <cstdio>
00026 #include <stdexcept>
00027 #include <string>
00028 #include <boost/format.hpp>
00029 
00030 #include "utap/common.h"
00031 
00032 namespace UTAP
00033 {
00039     class TypeException : public std::runtime_error
00040     {
00041     public:
00042         TypeException(std::string);
00043         TypeException(const boost::format &);
00044     };
00045 
00079     class ParserBuilder
00080     {
00081     public:
00082         /*********************************************************************
00083          * Prefixes
00084          */
00085         enum PREFIX { PREFIX_NONE = 0,
00086                       PREFIX_CONST = 1,
00087                       PREFIX_URGENT = 2,
00088                       PREFIX_BROADCAST = 4,
00089                       PREFIX_URGENT_BROADCAST = 6,
00090                       PREFIX_META = 8 };
00091 
00092         virtual ~ParserBuilder() {}
00093 
00098         virtual void addPosition(
00099             uint32_t position, uint32_t offset, uint32_t line, std::string path) = 0;
00100 
00106         virtual void setPosition(uint32_t a, uint32_t b) = 0;
00107 
00108         // Called when an error is detected
00109         virtual void handleError(std::string) = 0;
00110 
00111         // Called when a warning is issued
00112         virtual void handleWarning(std::string) = 0;
00113 
00114         void handleWarning(const char *msg, ...);
00115 
00116         void handleError(const char *msg, ...);
00117     
00123         virtual bool isType(const char*) = 0;
00124 
00126         virtual void typeDuplicate() = 0;
00127 
00129         virtual void typePop() = 0;
00130 
00134         virtual void typeBool(PREFIX) = 0;
00135         
00139         virtual void typeInt(PREFIX) = 0;
00140 
00146         virtual void typeBoundedInt(PREFIX) = 0;
00147 
00151         virtual void typeChannel(PREFIX) = 0;
00152 
00156         virtual void typeClock() = 0;
00157 
00161         virtual void typeVoid() = 0;
00162         
00167         virtual void typeArrayOfSize(size_t) = 0;
00168 
00173         virtual void typeArrayOfType(size_t) = 0;
00174 
00179         virtual void typeScalar(PREFIX) = 0;
00180 
00185         virtual void typeName(PREFIX, const char* name) = 0;
00186 
00192         virtual void typeStruct(PREFIX, uint32_t fields) = 0;
00193 
00200         virtual void structField(const char* name) = 0; 
00201 
00206         virtual void declTypeDef(const char* name) = 0; 
00207 
00211         virtual void declVar(const char* name, bool init) = 0; 
00212 
00213         virtual void declInitialiserList(uint32_t num) = 0; // n initialisers
00214         virtual void declFieldInit(const char* name) = 0; // 1 initialiser
00215         
00220         virtual void declProgress(bool hasGuard) = 0;
00221   
00222         /********************************************************************
00223          * Function declarations
00224          */
00225         virtual void declParameter(const char* name, bool ref) = 0;
00226   
00227         virtual void declFuncBegin(const char* name) = 0;
00228         virtual void declFuncEnd() = 0; // 1 block
00229 
00230         /********************************************************************
00231          * Process declarations
00232          */
00233         virtual void procBegin(const char* name) = 0; // m parameters
00234         virtual void procEnd() = 0; // 1 ProcBody
00235         virtual void procState(const char* name, bool hasInvariant) = 0; // 1 expr
00236         virtual void procStateCommit(const char* name) = 0; // mark previously decl. state
00237         virtual void procStateUrgent(const char* name) = 0; // mark previously decl. state
00238         virtual void procStateInit(const char* name) = 0; // mark previously decl. state
00239         virtual void procEdgeBegin(const char* from, const char* to, const bool control) = 0;
00240         virtual void procEdgeEnd(const char* from, const char* to) = 0; 
00241         virtual void procSelect(const char * id) = 0; // 1 expr
00242         virtual void procGuard() = 0; // 1 expr
00243         virtual void procSync(Constants::synchronisation_t type) = 0; // 1 expr
00244         virtual void procUpdate() = 0; // 1 expr
00245 
00246         /*********************************************************************
00247          * Statements
00248          */
00249         virtual void blockBegin() = 0;
00250         virtual void blockEnd() = 0;
00251         virtual void emptyStatement() = 0;
00252         virtual void forBegin() = 0; // 3 expr
00253         virtual void forEnd() = 0; // 1 stat
00254         virtual void iterationBegin(const char *name) = 0; // 1 id, 1 type
00255         virtual void iterationEnd(const char *name) = 0; // 1 stat
00256         virtual void whileBegin() = 0;
00257         virtual void whileEnd() = 0; // 1 expr, 1 stat
00258         virtual void doWhileBegin() = 0;
00259         virtual void doWhileEnd() = 0; // 1 stat, 1 expr
00260         virtual void ifBegin() = 0;
00261         virtual void ifElse() = 0;
00262         virtual void ifEnd(bool) = 0; // 1 expr, 1 or 2 statements
00263         virtual void breakStatement() = 0;
00264         virtual void continueStatement() = 0;
00265         virtual void switchBegin() = 0;
00266         virtual void switchEnd() = 0; // 1 expr, 1+ case/default
00267         virtual void caseBegin() = 0;
00268         virtual void caseEnd() = 0;  // 1 expr, 0+ stat
00269         virtual void defaultBegin() = 0;
00270         virtual void defaultEnd() = 0; // 0+ statements
00271         virtual void exprStatement() = 0; // 1 expr
00272         virtual void returnStatement(bool) = 0; // 1 expr if argument is true
00273         virtual void assertStatement() = 0; // 1 expr
00274 
00275         /********************************************************************
00276          * Expressions
00277          */
00278         virtual void exprFalse() = 0;
00279         virtual void exprTrue() = 0;
00280         virtual void exprId(const char * varName) = 0;
00281         virtual void exprNat(int32_t) = 0; // natural number
00282         virtual void exprCallBegin() = 0;
00283         virtual void exprCallEnd(uint32_t n) = 0; // n exprs as arguments
00284         virtual void exprArray() = 0; // 2 expr 
00285         virtual void exprPostIncrement() = 0; // 1 expr
00286         virtual void exprPreIncrement() = 0; // 1 expr
00287         virtual void exprPostDecrement() = 0; // 1 expr
00288         virtual void exprPreDecrement() = 0; // 1 expr
00289         virtual void exprAssignment(Constants::kind_t op) = 0; // 2 expr
00290         virtual void exprUnary(Constants::kind_t unaryop) = 0; // 1 expr
00291         virtual void exprBinary(Constants::kind_t binaryop) = 0; // 2 expr
00292         virtual void exprTernary(Constants::kind_t ternaryop, bool firstMissing = false) = 0; // 3 expr
00293         virtual void exprInlineIf() = 0; // 3 expr
00294         virtual void exprComma() = 0; // 2 expr
00295         virtual void exprDot(const char *) = 0; // 1 expr
00296         virtual void exprDeadlock() = 0;
00297         virtual void exprForAllBegin(const char *name) = 0;
00298         virtual void exprForAllEnd(const char *name) = 0;
00299         virtual void exprExistsBegin(const char *name) = 0;
00300         virtual void exprExistsEnd(const char *name) = 0;
00301 
00302         /********************************************************************
00303          * System declaration
00304          */
00305         virtual void instantiationBegin(
00306             const char* id, size_t parameters, const char* templ) = 0;
00307         virtual void instantiationEnd(
00308             const char* id, size_t parameters, const char* templ, size_t arguments) = 0;
00309         virtual void process(const char*) = 0;
00310         virtual void done() = 0; // marks the end of the file
00311 
00312         /********************************************************************
00313          * Properties
00314          */
00315         virtual void property() = 0;
00316         virtual void paramProperty(size_t, Constants::kind_t) = 0;
00317         virtual void declParamId(const char*) = 0;
00318 
00319         /********************************************************************
00320          * Guiding
00321          */
00322         virtual void beforeUpdate() = 0;
00323         virtual void afterUpdate() = 0;
00324 
00325         /********************************************************************
00326          * Priority
00327          */
00328         virtual void incProcPriority() = 0;
00329         virtual void incChanPriority() = 0;
00330         virtual void chanPriority() = 0;
00331         virtual void procPriority(const char*) = 0;
00332         virtual void defaultChanPriority() = 0;
00333 
00334         /********************************************************************
00335          * SSQL
00336          */
00337         virtual void ssQueryBegin() = 0;
00338         virtual void ssQueryEnd() = 0;
00339     };
00340 }
00341     
00349 int32_t parseXTA(FILE *, UTAP::ParserBuilder *, bool newxta);
00350 
00351 int32_t parseXTA(const char*, UTAP::ParserBuilder *, bool newxta);
00352 
00360 int32_t parseXTA(const char*, UTAP::ParserBuilder *, 
00361                  bool newxta, UTAP::xta_part_t part, std::string xpath);
00362 
00363 
00371 int32_t parseXMLBuffer(const char *buffer, UTAP::ParserBuilder *,
00372                        bool newxta);
00373 
00382 int32_t parseXMLFile(const char *filename, UTAP::ParserBuilder *, bool newxta);
00383 
00391 int32_t parseProperty(const char *str,
00392                       UTAP::ParserBuilder *aParserBuilder, bool ssql = false);
00393 
00400 int32_t parseProperty(FILE *, UTAP::ParserBuilder *aParserBuilder, bool ssql = false);
00401 
00402 
00403 #endif

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