1 // Defines the Model Definition Language (MDL)
10 Field::Field(char *s) {
18 char * Field::field() {
24 AElementexpr::AElementexpr(AElementexpr *l, AElementexpr *r, int op) {
25 left=l;right=r;type=op;
28 AElementexpr::AElementexpr(char *ctype, AElementexpr *l) {
29 type=AELEMENTEXPR_CAST;
34 AElementexpr::AElementexpr(Literal *lit) {
36 type=AELEMENTEXPR_LIT;
39 AElementexpr::AElementexpr(Label *lab) {
41 type=AELEMENTEXPR_LABEL;
44 AElementexpr::AElementexpr(AElementexpr *l,Field *f) {
47 type=AELEMENTEXPR_FIELD;
50 AElementexpr::AElementexpr() {
51 type=AELEMENTEXPR_NULL;
54 AElementexpr::AElementexpr(AElementexpr *l,Field *f, AElementexpr * i) {
58 type=AELEMENTEXPR_FIELDARRAY;
61 AElementexpr * AElementexpr::getleft() {
65 char * AElementexpr::getcasttype() {
69 AElementexpr * AElementexpr::getright() {
73 int AElementexpr::gettype() {
77 Label * AElementexpr::getlabel() {
81 Literal * AElementexpr::getliteral() {
85 Field * AElementexpr::getfield() {
89 void AElementexpr::print() {
91 case AELEMENTEXPR_LABEL:
94 case AELEMENTEXPR_SUB:
101 case AELEMENTEXPR_ADD:
108 case AELEMENTEXPR_MULT:
115 case AELEMENTEXPR_DIV:
122 case AELEMENTEXPR_LIT:
125 case AELEMENTEXPR_FIELD:
130 case AELEMENTEXPR_FIELDARRAY:
138 case AELEMENTEXPR_CAST:
139 printf("cast(%s,",casttype);
143 case AELEMENTEXPR_NULL:
151 Type::Type(char *s, int n, Label** l) {
152 str=s;numlabels=n;labels=l;
157 for(int i=0;i>numlabels;i++) {
163 int Type::getnumlabels() {
167 Label * Type::getlabel(int i) {
173 TypeEle::TypeEle(char *s, int n, AElementexpr** e) {
174 str=s;numexpr=n;exprs=e;
177 void TypeEle::print() {
179 for(int i=0;i<numexpr;i++) {
185 int TypeEle::getnumexpr() {
189 AElementexpr * TypeEle::getexpr(int i) {
195 AQuantifier::AQuantifier(Label *l,Type *t, Set *s) {
199 type=AQUANTIFIER_SING;
202 AQuantifier::AQuantifier(Label *l,Type *tl, Label *r, Type *tr, Set *s) {
208 type=AQUANTIFIER_TUPLE;
211 AQuantifier::AQuantifier(Label *l,AElementexpr *e1, AElementexpr *e2) {
214 type=AQUANTIFIER_RANGE;
217 Label * AQuantifier::getleft() {
221 Type * AQuantifier::gettleft() {
225 Type * AQuantifier::gettright() {
229 Label * AQuantifier::getright() {
233 Set * AQuantifier::getset() {
237 AElementexpr * AQuantifier::getlower() {
241 AElementexpr * AQuantifier::getupper() {
245 int AQuantifier::gettype() {
249 void AQuantifier::print() {
251 case AQUANTIFIER_SING:
259 case AQUANTIFIER_TUPLE:
270 case AQUANTIFIER_RANGE:
283 Statementa::Statementa(AElementexpr *l, char *vt) {
286 type=STATEMENTA_VALID;
289 char * Statementa::getvalidtype() {
293 Statementa::Statementa(AElementexpr *l, Set *s) {
299 Statementa::Statementa(Statementa *l, Statementa *r, int t) {
305 int Statementa::gettype() {
309 Statementa * Statementa::getleft() {
313 Statementa * Statementa::getright() {
317 AElementexpr * Statementa::getleftee() {
321 AElementexpr * Statementa::getrightee() {
325 Statementa::Statementa(Statementa *l) {
330 Statementa::Statementa() {
331 type=STATEMENTA_TRUE;
334 Statementa::Statementa(AElementexpr *l, AElementexpr *r, int t) {
340 Set * Statementa::getset() {
344 void Statementa::print() {
366 case STATEMENTA_EQUALS:
376 case STATEMENTA_TRUE:
385 TypeEle * Statementb::gettleft() {
389 TypeEle * Statementb::gettright() {
393 AElementexpr * Statementb::getleft() {
397 AElementexpr * Statementb::getright() {
401 Setlabel * Statementb::getsetlabel() {
405 Statementb::Statementb(TypeEle *tl,AElementexpr *l, Setlabel *sl) {
406 left=l;setlabel=sl;tleft=tl;
407 type=STATEMENTB_SING;
410 int Statementb::gettype() {
414 Statementb::Statementb(TypeEle *tl,AElementexpr *l, TypeEle *tr,AElementexpr *r, Setlabel *sl) {
418 type=STATEMENTB_TUPLE;
421 void Statementb::print() {
423 case STATEMENTB_SING:
428 case STATEMENTB_TUPLE:
450 Rule::Rule(AQuantifier **q, int nq) {
459 void Rule::setdelay() {
463 bool Rule::isdelayed() {
467 bool Rule::isstatic() {
470 void Rule::setstatic() {
474 void Rule::setstatementa(Statementa *sa) {
478 void Rule::setstatementb(Statementb *sb) {
482 Statementa * Rule::getstatementa() {
486 Statementb * Rule::getstatementb() {
490 int Rule::numquants() {
491 return numquantifiers;
494 AQuantifier* Rule::getquant(int i) {
495 return quantifiers[i];
500 for(int i=0;i<numquantifiers;i++) {
503 quantifiers[i]->print();