1 ///////////////////////////////////////////////////////////////////////////////
2 // This file is generated automatically using Prop (version 2.3.2),
3 // last updated on Mar 14, 1997.
4 // The original source file is "setl-ast.ph".
5 ///////////////////////////////////////////////////////////////////////////////
7 #define PROP_GARBAGE_COLLECTION_USED
8 #define PROP_PRINTER_USED
11 #ifndef SETL_abstract_syntax_h
12 #define SETL_abstract_syntax_h
14 #include "foundation.h"
17 #line 51 "setl-ast.ph"
18 ///////////////////////////////////////////////////////////////////////////////
20 // Forward class definition for Exp
22 ///////////////////////////////////////////////////////////////////////////////
23 #ifndef datatype_Exp_defined
24 #define datatype_Exp_defined
30 XXclXX
= 0, XXcnXX
= 1, XXckXX
= 2,
31 XXcpXX
= 3, XXdkdnXX
= 4, XXdnXX
= 5,
32 XXdmXX
= 6, XXdoXX
= 7, XXdodnXX
= 8,
33 XXdmdnXX
= 9, XXcpdnXX
= 10, XXcdXX
= 11,
34 XX_a_r_bXX
= 12, XX_d_i_vXX
= 13, XX_m_o_dXX
= 14,
35 XX_w_i_t_hXX
= 15, XX_l_e_s_sXX
= 16
40 ///////////////////////////////////////////////////////////////////////////////
42 // Forward class definition for Decl
44 ///////////////////////////////////////////////////////////////////////////////
45 #ifndef datatype_Decl_defined
46 #define datatype_Decl_defined
48 typedef a_Decl
* Decl
;
51 ///////////////////////////////////////////////////////////////////////////////
53 // Forward class definition for Term
55 ///////////////////////////////////////////////////////////////////////////////
56 #ifndef datatype_Term_defined
57 #define datatype_Term_defined
59 typedef a_Term
* Term
;
62 ///////////////////////////////////////////////////////////////////////////////
64 // Forward class definition for Ty
66 ///////////////////////////////////////////////////////////////////////////////
67 #ifndef datatype_Ty_defined
68 #define datatype_Ty_defined
75 ///////////////////////////////////////////////////////////////////////////////
77 // Forward class definition for LabeledExp
79 ///////////////////////////////////////////////////////////////////////////////
80 #ifndef datatype_LabeledExp_defined
81 #define datatype_LabeledExp_defined
83 typedef a_LabeledExp
* LabeledExp
;
86 ///////////////////////////////////////////////////////////////////////////////
88 // Forward class definition for Literal
90 ///////////////////////////////////////////////////////////////////////////////
91 #ifndef datatype_Literal_defined
92 #define datatype_Literal_defined
94 typedef a_Literal
* Literal
;
97 ///////////////////////////////////////////////////////////////////////////////
98 // Definition of type Ids
99 ///////////////////////////////////////////////////////////////////////////////
100 #line 44 "setl-ast.ph"
101 typedef a_List
<Id
> * Ids
;
103 ///////////////////////////////////////////////////////////////////////////////
104 // Definition of type Literals
105 ///////////////////////////////////////////////////////////////////////////////
106 #line 45 "setl-ast.ph"
107 typedef a_List
<Literal
> * Literals
;
109 ///////////////////////////////////////////////////////////////////////////////
110 // Definition of type Exps
111 ///////////////////////////////////////////////////////////////////////////////
112 #line 46 "setl-ast.ph"
113 typedef a_List
<Exp
> * Exps
;
115 ///////////////////////////////////////////////////////////////////////////////
116 // Definition of type LabeledExps
117 ///////////////////////////////////////////////////////////////////////////////
118 #line 47 "setl-ast.ph"
119 typedef a_List
<LabeledExp
> * LabeledExps
;
121 ///////////////////////////////////////////////////////////////////////////////
122 // Definition of type Decls
123 ///////////////////////////////////////////////////////////////////////////////
124 #line 48 "setl-ast.ph"
125 typedef a_List
<Decl
> * Decls
;
127 ///////////////////////////////////////////////////////////////////////////////
128 // Definition of type Terms
129 ///////////////////////////////////////////////////////////////////////////////
130 #line 49 "setl-ast.ph"
131 typedef a_List
<Term
> * Terms
;
133 ///////////////////////////////////////////////////////////////////////////////
134 // Definition of type Tys
135 ///////////////////////////////////////////////////////////////////////////////
136 #line 50 "setl-ast.ph"
137 typedef a_List
<Ty
> * Tys
;
139 ///////////////////////////////////////////////////////////////////////////////
141 // Base class for datatype Exp
143 ///////////////////////////////////////////////////////////////////////////////
144 class a_Exp
: public GCObject
{
147 tag_IDexp
= 0, tag_LITexp
= 1, tag_APPexp
= 2,
148 tag_TUPLEexp
= 3, tag_RECORDexp
= 4, tag_SETexp
= 5,
149 tag_CASEexp
= 6, tag_IFexp
= 7, tag_WHILEexp
= 8,
150 tag_SEQexp
= 9, tag_LETexp
= 10, tag_PRIMexp
= 11
154 const Tag_Exp tag__
; // variant tag
156 inline a_Exp(Tag_Exp t__
) : tag__(t__
) {}
159 ////////////////////////////////////////////////////////////////////////////
161 // Method for garbage collection tracing
163 ////////////////////////////////////////////////////////////////////////////
165 virtual void trace(GC
*);
168 inline int boxed(const a_Exp
*) { return 1; }
169 inline int untag(const a_Exp
* x
) { return x
->tag__
; }
170 ///////////////////////////////////////////////////////////////////////////////
172 // Class for datatype constructor Exp::IDexp
174 ///////////////////////////////////////////////////////////////////////////////
175 class Exp_IDexp
: public a_Exp
{
177 #line 6 "setl-ast.ph"
179 Exp_IDexp (Id x_IDexp
);
181 ////////////////////////////////////////////////////////////////////////////
183 // Method for garbage collection tracing
185 ////////////////////////////////////////////////////////////////////////////
187 virtual void trace(GC
*);
191 ///////////////////////////////////////////////////////////////////////////////
193 // Class for datatype constructor Exp::LITexp
195 ///////////////////////////////////////////////////////////////////////////////
196 class Exp_LITexp
: public a_Exp
{
198 #line 8 "setl-ast.ph"
200 Exp_LITexp (Literal x_LITexp
);
202 ////////////////////////////////////////////////////////////////////////////
204 // Method for garbage collection tracing
206 ////////////////////////////////////////////////////////////////////////////
208 virtual void trace(GC
*);
212 ///////////////////////////////////////////////////////////////////////////////
214 // Class for datatype constructor Exp::APPexp
216 ///////////////////////////////////////////////////////////////////////////////
217 class Exp_APPexp
: public a_Exp
{
219 #line 9 "setl-ast.ph"
221 Exp_APPexp (Exp x_1
, Exp x_2
);
223 ////////////////////////////////////////////////////////////////////////////
225 // Method for garbage collection tracing
227 ////////////////////////////////////////////////////////////////////////////
229 virtual void trace(GC
*);
233 ///////////////////////////////////////////////////////////////////////////////
235 // Class for datatype constructor Exp::TUPLEexp
237 ///////////////////////////////////////////////////////////////////////////////
238 class Exp_TUPLEexp
: public a_Exp
{
240 #line 10 "setl-ast.ph"
242 Exp_TUPLEexp (Exps x_TUPLEexp
);
244 ////////////////////////////////////////////////////////////////////////////
246 // Method for garbage collection tracing
248 ////////////////////////////////////////////////////////////////////////////
250 virtual void trace(GC
*);
254 ///////////////////////////////////////////////////////////////////////////////
256 // Class for datatype constructor Exp::RECORDexp
258 ///////////////////////////////////////////////////////////////////////////////
259 class Exp_RECORDexp
: public a_Exp
{
261 #line 11 "setl-ast.ph"
262 LabeledExps RECORDexp
;
263 Exp_RECORDexp (LabeledExps x_RECORDexp
);
265 ////////////////////////////////////////////////////////////////////////////
267 // Method for garbage collection tracing
269 ////////////////////////////////////////////////////////////////////////////
271 virtual void trace(GC
*);
275 ///////////////////////////////////////////////////////////////////////////////
277 // Class for datatype constructor Exp::SETexp
279 ///////////////////////////////////////////////////////////////////////////////
280 class Exp_SETexp
: public a_Exp
{
282 #line 12 "setl-ast.ph"
284 Exp_SETexp (Exps x_SETexp
);
286 ////////////////////////////////////////////////////////////////////////////
288 // Method for garbage collection tracing
290 ////////////////////////////////////////////////////////////////////////////
292 virtual void trace(GC
*);
296 ///////////////////////////////////////////////////////////////////////////////
298 // Class for datatype constructor Exp::CASEexp
300 ///////////////////////////////////////////////////////////////////////////////
301 class Exp_CASEexp
: public a_Exp
{
303 #line 13 "setl-ast.ph"
305 Exp_CASEexp (Exp x_1
, Exps x_2
);
307 ////////////////////////////////////////////////////////////////////////////
309 // Method for garbage collection tracing
311 ////////////////////////////////////////////////////////////////////////////
313 virtual void trace(GC
*);
317 ///////////////////////////////////////////////////////////////////////////////
319 // Class for datatype constructor Exp::IFexp
321 ///////////////////////////////////////////////////////////////////////////////
322 class Exp_IFexp
: public a_Exp
{
324 #line 14 "setl-ast.ph"
325 Exp _1
; Exp _2
; Exp _3
;
326 Exp_IFexp (Exp x_1
, Exp x_2
, Exp x_3
);
328 ////////////////////////////////////////////////////////////////////////////
330 // Method for garbage collection tracing
332 ////////////////////////////////////////////////////////////////////////////
334 virtual void trace(GC
*);
338 ///////////////////////////////////////////////////////////////////////////////
340 // Class for datatype constructor Exp::WHILEexp
342 ///////////////////////////////////////////////////////////////////////////////
343 class Exp_WHILEexp
: public a_Exp
{
345 #line 15 "setl-ast.ph"
347 Exp_WHILEexp (Exp x_1
, Exp x_2
);
349 ////////////////////////////////////////////////////////////////////////////
351 // Method for garbage collection tracing
353 ////////////////////////////////////////////////////////////////////////////
355 virtual void trace(GC
*);
359 ///////////////////////////////////////////////////////////////////////////////
361 // Class for datatype constructor Exp::SEQexp
363 ///////////////////////////////////////////////////////////////////////////////
364 class Exp_SEQexp
: public a_Exp
{
366 #line 16 "setl-ast.ph"
368 Exp_SEQexp (Exps x_SEQexp
);
370 ////////////////////////////////////////////////////////////////////////////
372 // Method for garbage collection tracing
374 ////////////////////////////////////////////////////////////////////////////
376 virtual void trace(GC
*);
380 ///////////////////////////////////////////////////////////////////////////////
382 // Class for datatype constructor Exp::LETexp
384 ///////////////////////////////////////////////////////////////////////////////
385 class Exp_LETexp
: public a_Exp
{
387 #line 17 "setl-ast.ph"
389 Exp_LETexp (Decls x_1
, Exp x_2
);
391 ////////////////////////////////////////////////////////////////////////////
393 // Method for garbage collection tracing
395 ////////////////////////////////////////////////////////////////////////////
397 virtual void trace(GC
*);
401 ///////////////////////////////////////////////////////////////////////////////
403 // Class for datatype constructor Exp::PRIMexp
405 ///////////////////////////////////////////////////////////////////////////////
406 class Exp_PRIMexp
: public a_Exp
{
408 #line 18 "setl-ast.ph"
410 Exp_PRIMexp (Prim x_PRIMexp
);
412 ////////////////////////////////////////////////////////////////////////////
414 // Method for garbage collection tracing
416 ////////////////////////////////////////////////////////////////////////////
418 virtual void trace(GC
*);
422 ///////////////////////////////////////////////////////////////////////////////
424 // Datatype constructor functions for Exp
426 ///////////////////////////////////////////////////////////////////////////////
427 extern a_Exp
* IDexp (Id x_IDexp
);
428 extern a_Exp
* LITexp (Literal x_LITexp
);
429 extern a_Exp
* APPexp (Exp x_1
, Exp x_2
);
430 extern a_Exp
* TUPLEexp (Exps x_TUPLEexp
);
431 extern a_Exp
* RECORDexp (LabeledExps x_RECORDexp
);
432 extern a_Exp
* SETexp (Exps x_SETexp
);
433 extern a_Exp
* CASEexp (Exp x_1
, Exps x_2
);
434 extern a_Exp
* IFexp (Exp x_1
, Exp x_2
, Exp x_3
);
435 extern a_Exp
* WHILEexp (Exp x_1
, Exp x_2
);
436 extern a_Exp
* SEQexp (Exps x_SEQexp
);
437 extern a_Exp
* LETexp (Decls x_1
, Exp x_2
);
438 extern a_Exp
* PRIMexp (Prim x_PRIMexp
);
441 ///////////////////////////////////////////////////////////////////////////////
443 // Pretty printing methods for Prim
445 ///////////////////////////////////////////////////////////////////////////////
447 extern ostream
& operator<<(ostream
&, Prim
);
448 extern PrettyOStream
& operator<<(PrettyOStream
&, Prim
);
449 ///////////////////////////////////////////////////////////////////////////////
451 // Base class for datatype Decl
453 ///////////////////////////////////////////////////////////////////////////////
454 class a_Decl
: public GCObject
{
457 tag_TYPEdecl
= 0, tag_DATATYPEdecl
= 1
462 ////////////////////////////////////////////////////////////////////////////
464 // Method for garbage collection tracing
466 ////////////////////////////////////////////////////////////////////////////
468 virtual void trace(GC
*);
471 inline int boxed(const a_Decl
*) { return 1; }
472 ///////////////////////////////////////////////////////////////////////////////
474 // Embbeded tag extraction functions
476 ///////////////////////////////////////////////////////////////////////////////
477 inline int untagp(const a_Decl
* x
)
478 { return (unsigned long)x
& 3; }
479 inline a_Decl
* derefp(const a_Decl
* x
)
480 { return (a_Decl
*)((unsigned long)x
& ~3); }
481 inline int untag(const a_Decl
* x
) { return untagp(x
); }
482 ///////////////////////////////////////////////////////////////////////////////
484 // Class for datatype constructor Decl::TYPEdecl
486 ///////////////////////////////////////////////////////////////////////////////
487 class Decl_TYPEdecl
: public a_Decl
{
489 #line 26 "setl-ast.ph"
490 Id _1
; Ids _2
; Ty _3
;
491 Decl_TYPEdecl (Id x_1
, Ids x_2
, Ty x_3
);
493 ////////////////////////////////////////////////////////////////////////////
495 // Method for garbage collection tracing
497 ////////////////////////////////////////////////////////////////////////////
499 virtual void trace(GC
*);
503 ///////////////////////////////////////////////////////////////////////////////
505 // Class for datatype constructor Decl::DATATYPEdecl
507 ///////////////////////////////////////////////////////////////////////////////
508 class Decl_DATATYPEdecl
: public a_Decl
{
510 #line 28 "setl-ast.ph"
511 Id _1
; Ids _2
; Terms _3
;
512 Decl_DATATYPEdecl (Id x_1
, Ids x_2
, Terms x_3
);
513 ~Decl_DATATYPEdecl();
514 ////////////////////////////////////////////////////////////////////////////
516 // Method for garbage collection tracing
518 ////////////////////////////////////////////////////////////////////////////
520 virtual void trace(GC
*);
524 ///////////////////////////////////////////////////////////////////////////////
526 // Datatype constructor functions for Decl
528 ///////////////////////////////////////////////////////////////////////////////
529 extern a_Decl
* TYPEdecl (Id x_1
, Ids x_2
, Ty x_3
);
530 extern a_Decl
* DATATYPEdecl (Id x_1
, Ids x_2
, Terms x_3
);
532 ///////////////////////////////////////////////////////////////////////////////
534 // Class for datatype constructor Term::TERM
536 ///////////////////////////////////////////////////////////////////////////////
537 class a_Term
: public GCObject
{
539 #line 30 "setl-ast.ph"
541 a_Term (Id x_1
, Ty x_2
);
543 ////////////////////////////////////////////////////////////////////////////
545 // Method for garbage collection tracing
547 ////////////////////////////////////////////////////////////////////////////
549 virtual void trace(GC
*);
552 inline int boxed(const a_Term
*) { return 1; }
553 inline int untag(const a_Term
*) { return 0; }
554 ///////////////////////////////////////////////////////////////////////////////
556 // Datatype constructor functions for Term
558 ///////////////////////////////////////////////////////////////////////////////
559 extern a_Term
* TERM (Id x_1
, Ty x_2
);
561 ///////////////////////////////////////////////////////////////////////////////
563 // Class for datatype constructor Ty::VARty
565 ///////////////////////////////////////////////////////////////////////////////
566 class a_Ty
: public GCObject
{
568 #line 34 "setl-ast.ph"
572 ////////////////////////////////////////////////////////////////////////////
574 // Method for garbage collection tracing
576 ////////////////////////////////////////////////////////////////////////////
578 virtual void trace(GC
*);
581 inline int boxed(const a_Ty
* x
) { return x
!= 0; }
582 inline int untag(const a_Ty
* x
) { return x
? 1 : 0; }
583 ///////////////////////////////////////////////////////////////////////////////
585 // Datatype constructor functions for Ty
587 ///////////////////////////////////////////////////////////////////////////////
588 extern a_Ty
* VARty (Ty x_VARty
);
590 ///////////////////////////////////////////////////////////////////////////////
592 // Class for datatype constructor LabeledExp::LABELEDexp
594 ///////////////////////////////////////////////////////////////////////////////
595 class a_LabeledExp
: public GCObject
{
597 #line 36 "setl-ast.ph"
599 a_LabeledExp (Id x_id
, Exp x_exp
);
600 virtual ~a_LabeledExp();
601 ////////////////////////////////////////////////////////////////////////////
603 // Method for garbage collection tracing
605 ////////////////////////////////////////////////////////////////////////////
607 virtual void trace(GC
*);
610 inline int boxed(const a_LabeledExp
*) { return 1; }
611 inline int untag(const a_LabeledExp
*) { return 0; }
612 ///////////////////////////////////////////////////////////////////////////////
614 // Datatype constructor functions for LabeledExp
616 ///////////////////////////////////////////////////////////////////////////////
617 extern a_LabeledExp
* LABELEDexp (Id x_id
, Exp x_exp
);
619 ///////////////////////////////////////////////////////////////////////////////
621 // Base class for datatype Literal
623 ///////////////////////////////////////////////////////////////////////////////
624 class a_Literal
: public GCObject
{
627 tag_INTlit
= 0, tag_REALlit
= 1, tag_STRINGlit
= 2,
632 virtual ~a_Literal();
633 ////////////////////////////////////////////////////////////////////////////
635 // Method for garbage collection tracing
637 ////////////////////////////////////////////////////////////////////////////
639 virtual void trace(GC
*);
642 inline int boxed(const a_Literal
*) { return 1; }
643 ///////////////////////////////////////////////////////////////////////////////
645 // Embbeded tag extraction functions
647 ///////////////////////////////////////////////////////////////////////////////
648 inline int untagp(const a_Literal
* x
)
649 { return (unsigned long)x
& 3; }
650 inline a_Literal
* derefp(const a_Literal
* x
)
651 { return (a_Literal
*)((unsigned long)x
& ~3); }
652 inline int untag(const a_Literal
* x
) { return untagp(x
); }
653 ///////////////////////////////////////////////////////////////////////////////
655 // Class for datatype constructor Literal::INTlit
657 ///////////////////////////////////////////////////////////////////////////////
658 class Literal_INTlit
: public a_Literal
{
660 #line 38 "setl-ast.ph"
662 Literal_INTlit (int x_INTlit
);
664 ////////////////////////////////////////////////////////////////////////////
666 // Method for garbage collection tracing
668 ////////////////////////////////////////////////////////////////////////////
670 virtual void trace(GC
*);
674 ///////////////////////////////////////////////////////////////////////////////
676 // Class for datatype constructor Literal::REALlit
678 ///////////////////////////////////////////////////////////////////////////////
679 class Literal_REALlit
: public a_Literal
{
681 #line 40 "setl-ast.ph"
683 Literal_REALlit (double x_REALlit
);
685 ////////////////////////////////////////////////////////////////////////////
687 // Method for garbage collection tracing
689 ////////////////////////////////////////////////////////////////////////////
691 virtual void trace(GC
*);
695 ///////////////////////////////////////////////////////////////////////////////
697 // Class for datatype constructor Literal::STRINGlit
699 ///////////////////////////////////////////////////////////////////////////////
700 class Literal_STRINGlit
: public a_Literal
{
702 #line 41 "setl-ast.ph"
703 char const * STRINGlit
;
704 Literal_STRINGlit (char const * x_STRINGlit
);
705 ~Literal_STRINGlit();
706 ////////////////////////////////////////////////////////////////////////////
708 // Method for garbage collection tracing
710 ////////////////////////////////////////////////////////////////////////////
712 virtual void trace(GC
*);
716 ///////////////////////////////////////////////////////////////////////////////
718 // Class for datatype constructor Literal::CHARlit
720 ///////////////////////////////////////////////////////////////////////////////
721 class Literal_CHARlit
: public a_Literal
{
723 #line 42 "setl-ast.ph"
725 Literal_CHARlit (char x_CHARlit
);
727 ////////////////////////////////////////////////////////////////////////////
729 // Method for garbage collection tracing
731 ////////////////////////////////////////////////////////////////////////////
733 virtual void trace(GC
*);
737 ///////////////////////////////////////////////////////////////////////////////
739 // Datatype constructor functions for Literal
741 ///////////////////////////////////////////////////////////////////////////////
742 extern a_Literal
* INTlit (int x_INTlit
);
743 extern a_Literal
* REALlit (double x_REALlit
);
744 extern a_Literal
* STRINGlit (char const * x_STRINGlit
);
745 extern a_Literal
* CHARlit (char x_CHARlit
);
747 #line 51 "setl-ast.ph"
748 #line 51 "setl-ast.ph"
752 #line 54 "setl-ast.ph"
754 ------------------------------- Statistics -------------------------------
755 Merge matching rules = yes
756 Number of DFA nodes merged = 0
757 Number of ifs generated = 0
758 Number of switches generated = 0
761 Adaptive matching = enabled
762 Fast string matching = enabled
763 Inline downcasts = enabled
764 --------------------------------------------------------------------------