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

builder.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_BUILDER_HH
00023 #define UTAP_BUILDER_HH
00024 
00025 #include <cstdio>
00026 #include <iostream>
00027 #include <exception>
00028 
00029 #include "utap/common.h"
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         static const int32_t PREFIX_META = 8;
00101 
00102         virtual ~ParserBuilder() {}
00103 
00109         virtual void setErrorHandler(ErrorHandler *) = 0;
00110 
00116         virtual void setPosition(const position_t &) = 0;
00117     
00123         virtual bool isType(const char*) = 0;
00124 
00132         virtual void typeName(int32_t prefix, const char* name, int range) = 0;
00133 
00139         virtual void typeStruct(int32_t prefix, uint32_t fields) = 0;
00140 
00147         virtual void structField(const char* name, uint32_t dim) = 0; 
00148 
00153         virtual void structFieldEnd() = 0;
00154 
00160         virtual void declTypeDef(const char* name, uint32_t dim) = 0; 
00161 
00166         virtual void declTypeDefEnd() = 0;
00167 
00171         virtual void declVar(const char* name, uint32_t dim, bool init) = 0; 
00172 
00177         virtual void declVarEnd() = 0;
00178         virtual void declInitialiserList(uint32_t num) = 0; // n initialisers
00179         virtual void declFieldInit(const char* name) = 0; // 1 initialiser
00180         
00185         virtual void declProgress(bool hasGuard) = 0;
00186   
00187         /********************************************************************
00188          * Function declarations
00189          */
00190         virtual void declParameter(const char* name, bool reference, uint32_t dim) = 0;
00191         // 1 type, dim array sizes
00192         virtual void declParameterEnd() = 0; // pop parameter type
00193   
00194         virtual void declFuncBegin(const char* name, uint32_t n) = 0; // n paramaters
00195         virtual void declFuncEnd() = 0; // 1 block
00196 
00197         /********************************************************************
00198          * Process declarations
00199          */
00200         virtual void procTemplateSet(const char *name) = 0;
00201         virtual void procBegin(const char* name, uint32_t m, uint32_t n) = 0; // n template set declarations, m parameters
00202         virtual void procEnd() = 0; // 1 ProcBody
00203         virtual void procState(const char* name, bool hasInvariant) = 0; // 1 expr
00204         virtual void procStateCommit(const char* name) = 0; // mark previously decl. state
00205         virtual void procStateUrgent(const char* name) = 0; // mark previously decl. state
00206         virtual void procStateWinning(const char* name) = 0; // mark previously decl. state
00207         virtual void procStateLosing(const char* name) = 0; // mark previously decl. state
00208         virtual void procStateInit(const char* name) = 0; // mark previously decl. state
00209         virtual void procEdgeBegin(const char* from, const char* to, const bool control) = 0;
00210         virtual void procEdgeEnd(const char* from, const char* to) = 0; 
00211         virtual void procSelect(const char * id) = 0; // 1 expr
00212         virtual void procGuard() = 0; // 1 expr
00213         virtual void procSync(Constants::synchronisation_t type) = 0; // 1 expr
00214         virtual void procUpdate() = 0; // 1 expr
00215 
00216         /*********************************************************************
00217          * Statements
00218          */
00219         virtual void blockBegin() = 0;
00220         virtual void blockEnd() = 0;
00221         virtual void emptyStatement() = 0;
00222         virtual void forBegin() = 0; // 3 expr
00223         virtual void forEnd() = 0; // 1 stat
00224         virtual void iterationBegin(const char *name) = 0; // 1 id, 1 type
00225         virtual void iterationEnd(const char *name) = 0; // 1 stat
00226         virtual void whileBegin() = 0;
00227         virtual void whileEnd() = 0; // 1 expr, 1 stat
00228         virtual void doWhileBegin() = 0;
00229         virtual void doWhileEnd() = 0; // 1 stat, 1 expr
00230         virtual void ifBegin() = 0;
00231         virtual void ifElse() = 0;
00232         virtual void ifEnd(bool) = 0; // 1 expr, 1 or 2 statements
00233         virtual void breakStatement() = 0;
00234         virtual void continueStatement() = 0;
00235         virtual void switchBegin() = 0;
00236         virtual void switchEnd() = 0; // 1 expr, 1+ case/default
00237         virtual void caseBegin() = 0;
00238         virtual void caseEnd() = 0;  // 1 expr, 0+ stat
00239         virtual void defaultBegin() = 0;
00240         virtual void defaultEnd() = 0; // 0+ statements
00241         virtual void exprStatement() = 0; // 1 expr
00242         virtual void returnStatement(bool) = 0; // 1 expr if argument is true
00243 
00244         /********************************************************************
00245          * Expressions
00246          */
00247         virtual void exprFalse() = 0;
00248         virtual void exprTrue() = 0;
00249         virtual void exprId(const char * varName) = 0;
00250         virtual void exprNat(int32_t) = 0; // natural number
00251         virtual void exprCallBegin() = 0;
00252         virtual void exprCallEnd(uint32_t n) = 0; // n exprs as arguments
00253         virtual void exprArg(uint32_t n) = 0; // 1 expr for n-th fn call argument (indexed from 0)
00254         virtual void exprArray() = 0; // 2 expr 
00255         virtual void exprPostIncrement() = 0; // 1 expr
00256         virtual void exprPreIncrement() = 0; // 1 expr
00257         virtual void exprPostDecrement() = 0; // 1 expr
00258         virtual void exprPreDecrement() = 0; // 1 expr
00259         virtual void exprAssignment(Constants::kind_t op) = 0; // 2 expr
00260         virtual void exprUnary(Constants::kind_t unaryop) = 0; // 1 expr
00261         virtual void exprBinary(Constants::kind_t binaryop) = 0; // 2 expr
00262         virtual void exprInlineIf() = 0; // 3 expr
00263         virtual void exprComma() = 0; // 2 expr
00264         virtual void exprDot(const char *) = 0; // 1 expr
00265         virtual void exprDeadlock() = 0;
00266         virtual void exprForAllBegin(const char *name) = 0;
00267         virtual void exprForAllEnd(const char *name) = 0;
00268 
00269         /********************************************************************
00270          * System declaration
00271          */
00272         virtual void instantiationBegin(const char* id, const char* templ) = 0;
00273         virtual void instantiationEnd(const char* id, const char* templ, uint32_t n) = 0; // n arguments
00274         virtual void process(const char*) = 0;
00275         virtual void done() = 0; // marks the end of the file
00276 
00277         /********************************************************************
00278          * Properties
00279          */
00280         virtual void quit() {}
00281         virtual void property(Constants::kind_t kind, int line) {}
00282 
00283         /********************************************************************
00284          * Guiding
00285          */
00286         virtual void beforeUpdate() = 0;
00287         virtual void afterUpdate() = 0;
00288 
00289         /********************************************************************
00290          * Priority
00291          */
00292         virtual void lowPriority(const char*) = 0;
00293         virtual void samePriority(const char*) = 0;
00294         virtual void higherPriority(const char*) = 0;
00295     };
00296 }
00297     
00305 int32_t parseXTA(FILE *, UTAP::ParserBuilder *, UTAP::ErrorHandler *,
00306                  bool newxta);
00307 
00315 int32_t parseXTA(const char*, UTAP::ParserBuilder *, UTAP::ErrorHandler *,
00316                  bool newxta, UTAP::xta_part_t part = UTAP::S_XTA);
00317 
00325 int32_t parseXMLBuffer(const char *buffer, UTAP::ParserBuilder *,
00326                        UTAP::ErrorHandler *, bool newxta);
00327 
00336 int32_t parseXMLFile(const char *filename, UTAP::ParserBuilder *,
00337                      UTAP::ErrorHandler *, bool newxta);
00338 
00344 int32_t parseProperty(const char *str,
00345                       UTAP::ParserBuilder *aParserBuilder, 
00346                       UTAP::ErrorHandler *);
00347 
00352 int32_t parseProperty(FILE *, UTAP::ParserBuilder *aParserBuilder,
00353                       UTAP::ErrorHandler *);
00354 
00355 
00356 #endif

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