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::string> type;
00039 std::stack<std::string> array;
00040 std::stack<std::ostream *> o;
00041 std::set<std::string> types;
00042 std::string urgent;
00043 std::string committed;
00044 std::string param;
00045 std::string templateset;
00046 int select, guard, sync, update;
00047
00048 bool first;
00049 uint32_t level;
00050
00051 void indent();
00052 void indent(std::string &s);
00053
00054 public:
00055 PrettyPrinter(std::ostream &stream);
00056
00057 virtual void addPosition(
00058 uint32_t position, uint32_t offset, uint32_t line, std::string path);
00059
00060 virtual void handleError(std::string);
00061 virtual void handleWarning(std::string);
00062
00063 virtual bool isType(const char *);
00064 virtual void typeBool(PREFIX);
00065 virtual void typeInt(PREFIX);
00066 virtual void typeBoundedInt(PREFIX);
00067 virtual void typeChannel(PREFIX);
00068 virtual void typeClock();
00069 virtual void typeVoid();
00070 virtual void typeScalar(PREFIX);
00071 virtual void typeName(PREFIX, const char *type);
00072 virtual void typePop();
00073 virtual void typeDuplicate();
00074 virtual void typeArrayOfSize(size_t n);
00075 virtual void typeArrayOfType(size_t n);
00076 virtual void declTypeDef(const char* name);
00077 virtual void declVar(const char *id, bool init);
00078 virtual void declInitialiserList(uint32_t num);
00079 virtual void declFieldInit(const char* name);
00080 virtual void declParameter(const char* name, bool);
00081 virtual void declFuncBegin(const char* name);
00082 virtual void declFuncEnd();
00083 virtual void blockBegin();
00084 virtual void blockEnd();
00085 virtual void emptyStatement();
00086 virtual void forBegin();
00087 virtual void forEnd();
00088 virtual void iterationBegin(const char *name);
00089 virtual void iterationEnd(const char *name);
00090 virtual void whileBegin();
00091 virtual void whileEnd();
00092 virtual void doWhileBegin();
00093 virtual void doWhileEnd();
00094 virtual void ifBegin();
00095 virtual void ifElse();
00096 virtual void ifEnd(bool);
00097 virtual void breakStatement();
00098 virtual void continueStatement();
00099 virtual void exprStatement();
00100 virtual void returnStatement(bool hasValue);
00101 virtual void procBegin(const char* name);
00102 virtual void procState(const char *id, bool hasInvariant);
00103 virtual void procStateUrgent(const char *id);
00104 virtual void procStateCommit(const char *id);
00105 virtual void procStateInit(const char *id);
00106 virtual void procSelect(const char *id);
00107 virtual void procGuard();
00108 virtual void procSync(Constants::synchronisation_t type);
00109 virtual void procUpdate();
00110 virtual void procEdgeBegin(const char *source, const char *target, const bool control);
00111 virtual void procEdgeEnd(const char *source, const char *target);
00112 virtual void procEnd();
00113 virtual void exprId(const char *id);
00114 virtual void exprNat(int32_t n);
00115 virtual void exprTrue();
00116 virtual void exprFalse();
00117 virtual void exprCallBegin();
00118 virtual void exprCallEnd(uint32_t n);
00119 virtual void exprArray();
00120 virtual void exprPostIncrement();
00121 virtual void exprPreIncrement();
00122 virtual void exprPostDecrement();
00123 virtual void exprPreDecrement();
00124 virtual void exprAssignment(Constants::kind_t op);
00125 virtual void exprUnary(Constants::kind_t op);
00126 virtual void exprBinary(Constants::kind_t op);
00127 virtual void exprTernary(Constants::kind_t op);
00128 virtual void exprInlineIf();
00129 virtual void exprComma();
00130 virtual void exprDot(const char *);
00131 virtual void exprDeadlock();
00132 virtual void exprForAllBegin(const char *name);
00133 virtual void exprForAllEnd(const char *name);
00134 virtual void exprExistsBegin(const char *name);
00135 virtual void exprExistsEnd(const char *name);
00136 virtual void beforeUpdate();
00137 virtual void afterUpdate();
00138 virtual void instantiationBegin(const char *, size_t, const char *);
00139 virtual void instantiationEnd(
00140 const char *, size_t, const char *, size_t);
00141 virtual void process(const char *id);
00142 virtual void done();
00143 };
00144 }
00145
00146 #endif