Accidentally checked this file in...removing it now.
[repair.git] / Repair / RepairInterpreter / amodel.h
1 // Defines the Model Definition Language (MDL)
2
3 #ifndef Abstract_H
4 #define Abstract_H
5 #include<unistd.h>
6 #include "classlist.h"
7
8
9 class Field {
10  public:
11   Field(char *s);
12   void print();
13   char * field();
14  private:
15   char *str;
16 };
17
18
19
20
21
22 #define AELEMENTEXPR_LABEL 1
23 #define AELEMENTEXPR_SUB 2
24 #define AELEMENTEXPR_ADD 3
25 #define AELEMENTEXPR_MULT 4
26 #define AELEMENTEXPR_LIT 5
27 #define AELEMENTEXPR_FIELD 6
28 #define AELEMENTEXPR_FIELDARRAY 7
29 #define AELEMENTEXPR_NULL 8
30 #define AELEMENTEXPR_DIV 12
31 #define AELEMENTEXPR_CAST 13
32
33 class AElementexpr {
34  public:
35   AElementexpr(AElementexpr *l, AElementexpr *r, int op);
36   AElementexpr(Literal *lit);
37   AElementexpr(Label *lab);
38   AElementexpr(char *ctype, AElementexpr *l);
39   AElementexpr(AElementexpr *l,Field *f);
40   AElementexpr();
41   AElementexpr(AElementexpr *l,Field *f, AElementexpr * i);
42   AElementexpr * getleft();
43   AElementexpr * getright();
44   int gettype();
45   Label * getlabel();
46   Literal * getliteral();
47   Field * getfield();
48   virtual void print();
49   char * getcasttype();
50
51  protected:
52   int type;
53   char *casttype;
54   AElementexpr *left, *right;
55   Label *label;
56   Literal *literal;
57   Field *field;
58 };
59
60
61
62
63
64 class Type {
65  public:
66   Type(char *s, int n, Label** l);
67   void print();
68   int getnumlabels();
69   Label * getlabel(int i);
70     
71  private:
72   char *str;
73   int numlabels;
74   Label **labels;
75 };
76
77
78
79
80
81 class TypeEle {
82  public:
83   TypeEle(char *s, int n, AElementexpr ** e);
84   void print();
85   int getnumexpr();
86   AElementexpr * getexpr(int i);
87  private:
88   char *str;
89   int numexpr;
90   AElementexpr **exprs;
91 };
92
93
94
95
96
97 #define AQUANTIFIER_SING 1
98 #define AQUANTIFIER_TUPLE 2
99 #define AQUANTIFIER_RANGE 3
100
101 class AQuantifier {
102  public:
103   AQuantifier(Label *l,Type *t, Set *s);
104   AQuantifier(Label *l,Type *tl, Label *r, Type *tr, Set *s);
105   AQuantifier(Label *l,AElementexpr *e1, AElementexpr *e2);
106   void print();
107   int gettype();
108   Label *getleft();
109   Type *gettleft();
110   Type *gettright();
111   Label *getright();
112   Set *getset();
113   AElementexpr * getlower();
114   AElementexpr * getupper();
115
116  private:
117   int type;
118   AElementexpr *lower, *upper;
119   Label *left, *right;
120   Type *tleft,*tright;
121   Set *set;
122 };
123
124
125
126
127
128
129 #define STATEMENTA_OR 1
130 #define STATEMENTA_AND 2
131 #define STATEMENTA_NOT 3
132 #define STATEMENTA_EQUALS 4
133 #define STATEMENTA_LT 5
134 #define STATEMENTA_TRUE 6
135 #define STATEMENTA_SET 7
136 #define STATEMENTA_VALID 8
137
138 class Statementa {
139  public:
140   Statementa(Statementa *l, Statementa *r, int t);
141   Statementa(Statementa *l);
142   Statementa();
143   Statementa(AElementexpr *l, AElementexpr *r, int t);
144   Statementa(AElementexpr *l, Set *s);
145   Statementa(AElementexpr *, char *);
146   void print();
147   int gettype();
148   Statementa * getleft();
149   Statementa * getright();
150   AElementexpr * getleftee();
151   AElementexpr * getrightee();
152   Set * getset();
153   char *getvalidtype();
154
155  private:
156   int type;
157   Set *set;
158   Statementa *left,*right;
159   AElementexpr *leftee, *rightee;
160   char *validtype;
161 };
162
163
164
165
166
167
168 #define STATEMENTB_SING 1
169 #define STATEMENTB_TUPLE 2
170
171 class Statementb {
172  public:
173   Statementb(TypeEle *tl,AElementexpr *l, Setlabel *sl);
174   Statementb(TypeEle *tl,AElementexpr *l, TypeEle *tr,AElementexpr *r, Setlabel *sl);
175   Statementb() {}
176   virtual void print();
177   int gettype();
178   AElementexpr *getleft();
179   AElementexpr *getright();
180   Setlabel *getsetlabel();
181   TypeEle * gettleft();
182   TypeEle * gettright();
183
184  protected:
185   TypeEle *tleft, *tright;
186   AElementexpr *left, *right;
187   Setlabel *setlabel;
188   int type;
189 };
190
191
192
193
194
195
196 class Rule {
197  public:
198   Rule();
199   Rule(AQuantifier **q, int nq);
200   void setstatementa(Statementa *sa);
201   void setstatementb(Statementb *sb);
202   void setdelay();
203   void print();
204   int numquants();
205   AQuantifier* getquant(int i);
206   Statementa *getstatementa();
207   Statementb *getstatementb();
208   bool isdelayed();
209   bool isstatic();
210   void setstatic();
211
212  private:
213   bool staticrule;
214   bool delay;
215   int numquantifiers;
216   AQuantifier **quantifiers;
217   Statementa *statementa;
218   Statementb *statementb;
219 };
220
221
222 #endif