00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef UTAP_PRETTYPRINTER_H
00023 #define UTAP_PRETTYPRINTER_H
00024
00025 #include <string>
00026 #include <vector>
00027 #include <ostream>
00028 #include <stack>
00029 #include "utap/abstractbuilder.h"
00030
00031 namespace UTAP
00032 {
00033
00034 class PrettyPrinter : public AbstractBuilder
00035 {
00036 private:
00037 std::vector<std::string> st;
00038 std::stack<std::ostream *> o;
00039 std::string urgent;
00040 std::string committed;
00041 std::string param;
00042 int guard, sync, update;
00043
00044 bool first;
00045 uint32_t level;
00046
00047 void indent();
00048 void indent(std::string &s);
00049
00050 public:
00051 PrettyPrinter(std::ostream &stream);
00052
00053 virtual void setErrorHandler(ErrorHandler *);
00054 virtual void setPosition(const position_t &);
00055
00056 virtual bool isType(const char *id);
00057 virtual void typeName(int32_t prefix, const char *type, int range);
00058 virtual void declVar(const char *id, uint32_t dim, bool init);
00059 virtual void declVarEnd();
00060 virtual void declInitialiserList(uint32_t num);
00061 virtual void declFieldInit(const char* name);
00062 virtual void declParameter(const char* name, bool reference, uint32_t dim);
00063 virtual void declParameterEnd();
00064 virtual void declFuncBegin(const char* name, uint32_t n);
00065 virtual void declFuncEnd();
00066 virtual void blockBegin();
00067 virtual void blockEnd();
00068 virtual void emptyStatement();
00069 virtual void forBegin();
00070 virtual void forEnd();
00071 virtual void whileBegin();
00072 virtual void whileEnd();
00073 virtual void doWhileBegin();
00074 virtual void doWhileEnd();
00075 virtual void ifBegin();
00076 virtual void ifElse();
00077 virtual void ifEnd(bool);
00078 virtual void breakStatement();
00079 virtual void continueStatement();
00080 virtual void exprStatement();
00081 virtual void returnStatement(bool hasValue);
00082 virtual void procBegin(const char *id, uint32_t n);
00083 virtual void procState(const char *id, bool hasInvariant);
00084 virtual void procStateUrgent(const char *id);
00085 virtual void procStateCommit(const char *id);
00086 virtual void procStateInit(const char *id);
00087 virtual void procGuard();
00088 virtual void procSync(Constants::synchronisation_t type);
00089 virtual void procUpdate();
00090 virtual void procEdge(const char *source, const char *target);
00091 virtual void procEnd();
00092 virtual void exprId(const char *id);
00093 virtual void exprNat(int32_t n);
00094 virtual void exprTrue();
00095 virtual void exprFalse();
00096 virtual void exprCallBegin(const char *name);
00097 virtual void exprCallEnd(uint32_t n);
00098 virtual void exprArg(uint32_t n);
00099 virtual void exprArray();
00100 virtual void exprPostIncrement();
00101 virtual void exprPreIncrement();
00102 virtual void exprPostDecrement();
00103 virtual void exprPreDecrement();
00104 virtual void exprAssignment(Constants::kind_t op);
00105 virtual void exprUnary(Constants::kind_t op);
00106 virtual void exprBinary(Constants::kind_t op);
00107 virtual void exprInlineIf();
00108 virtual void exprComma();
00109 virtual void exprDot(const char *);
00110 virtual void exprDeadlock();
00111 virtual void beforeUpdate();
00112 virtual void afterUpdate();
00113 virtual void instantiationBegin(const char *id, const char *templ);
00114 virtual void instantiationEnd(const char* id, const char* templ, uint32_t n);
00115 virtual void process(const char *id);
00116 virtual void done();
00117 };
00118 }
00119
00120 #endif