1 ///////////////////////////////////////////////////////////////////////////////
2 // This file is generated automatically using Prop (version 2.3.6),
3 // last updated on Nov 2, 1999.
4 // The original source file is "setl-ast.ph".
5 ///////////////////////////////////////////////////////////////////////////////
8 ///////////////////////////////////////////////////////////////////////////////
10 // This file contains the abstract syntax tree definitions for the
11 // SETL-like extension language of Prop.
13 ///////////////////////////////////////////////////////////////////////////////
14 #ifndef setl_extension_abstract_syntax_tree_h
15 #define setl_extension_abstract_syntax_tree_h
20 ///////////////////////////////////////////////////////////////////////////////
22 // Forward AST declarations.
24 ///////////////////////////////////////////////////////////////////////////////
25 #line 18 "setl-ast.ph"
26 #line 22 "setl-ast.ph"
27 ///////////////////////////////////////////////////////////////////////////////
29 // Forward class definition for Exp
31 ///////////////////////////////////////////////////////////////////////////////
32 #ifndef datatype_Exp_defined
33 #define datatype_Exp_defined
38 ///////////////////////////////////////////////////////////////////////////////
40 // Forward class definition for Decl
42 ///////////////////////////////////////////////////////////////////////////////
43 #ifndef datatype_Decl_defined
44 #define datatype_Decl_defined
46 typedef a_Decl
* Decl
;
49 ///////////////////////////////////////////////////////////////////////////////
51 // Forward class definition for Time
53 ///////////////////////////////////////////////////////////////////////////////
54 #ifndef datatype_Time_defined
55 #define datatype_Time_defined
57 typedef a_Time
* Time
;
60 ///////////////////////////////////////////////////////////////////////////////
62 // Forward class definition for Space
64 ///////////////////////////////////////////////////////////////////////////////
65 #ifndef datatype_Space_defined
66 #define datatype_Space_defined
68 typedef a_Space
* Space
;
71 #line 22 "setl-ast.ph"
72 #line 22 "setl-ast.ph"
75 ///////////////////////////////////////////////////////////////////////////////
77 // AST for definitions, signatures, statements and bindings
79 ///////////////////////////////////////////////////////////////////////////////
81 ///////////////////////////////////////////////////////////////////////////////
83 // Type 'Def' represents definitions.
85 ///////////////////////////////////////////////////////////////////////////////
86 #line 35 "setl-ast.ph"
87 #line 100 "setl-ast.ph"
88 ///////////////////////////////////////////////////////////////////////////////
90 // Forward class definition for Def
92 ///////////////////////////////////////////////////////////////////////////////
93 #ifndef datatype_Def_defined
94 #define datatype_Def_defined
101 ///////////////////////////////////////////////////////////////////////////////
103 // Forward class definition for Sig
105 ///////////////////////////////////////////////////////////////////////////////
106 #ifndef datatype_Sig_defined
107 #define datatype_Sig_defined
112 # define NOsig (Sig)0
114 ///////////////////////////////////////////////////////////////////////////////
116 // Forward class definition for Stmt
118 ///////////////////////////////////////////////////////////////////////////////
119 #ifndef datatype_Stmt_defined
120 #define datatype_Stmt_defined
122 typedef a_Stmt
* Stmt
;
125 # define NOstmt (Stmt)0
127 ///////////////////////////////////////////////////////////////////////////////
128 // Definition of type LabSig
129 ///////////////////////////////////////////////////////////////////////////////
130 #line 94 "setl-ast.ph"
131 typedef struct { Id id
; Sig sig
; } LabSig
;
133 ///////////////////////////////////////////////////////////////////////////////
134 // Definition of type LabSigs
135 ///////////////////////////////////////////////////////////////////////////////
136 #line 95 "setl-ast.ph"
137 typedef a_List
<LabSig
> * LabSigs
;
139 ///////////////////////////////////////////////////////////////////////////////
140 // Definition of type Defs
141 ///////////////////////////////////////////////////////////////////////////////
142 #line 96 "setl-ast.ph"
143 typedef a_List
<Def
> * Defs
;
145 ///////////////////////////////////////////////////////////////////////////////
146 // Definition of type Sigs
147 ///////////////////////////////////////////////////////////////////////////////
148 #line 97 "setl-ast.ph"
149 typedef a_List
<Sig
> * Sigs
;
151 ///////////////////////////////////////////////////////////////////////////////
152 // Definition of type Stmts
153 ///////////////////////////////////////////////////////////////////////////////
154 #line 98 "setl-ast.ph"
155 typedef a_List
<Stmt
> * Stmts
;
157 ///////////////////////////////////////////////////////////////////////////////
158 // Definition of type Generators
159 ///////////////////////////////////////////////////////////////////////////////
160 #line 99 "setl-ast.ph"
161 typedef a_List
<Generator
> * Generators
;
163 ///////////////////////////////////////////////////////////////////////////////
165 // Base class for datatype Def
167 ///////////////////////////////////////////////////////////////////////////////
168 class a_Def
: public Loc
{
171 tag_VARdef
= 0, tag_FUNCTIONdef
= 1, tag_MODULEdef
= 2,
172 tag_SIGNATUREdef
= 3, tag_TYPEdef
= 4, tag_LAMBDAdef
= 5
176 const Tag_Def tag__
; // variant tag
178 inline a_Def(Tag_Def t__
) : tag__(t__
) {}
181 inline int boxed(const a_Def
* x
) { return x
!= 0; }
182 inline int untag(const a_Def
* x
) { return x
? (x
->tag__
+1) : 0; }
183 ///////////////////////////////////////////////////////////////////////////////
185 // Class for datatype constructor Def::VARdef
187 ///////////////////////////////////////////////////////////////////////////////
188 class Def_VARdef
: public a_Def
{
190 #line 37 "setl-ast.ph"
191 Id id
; Ty ty
; Exp init_exp
;
192 Def_VARdef (Id x_id
, Ty x_ty
, Exp x_init_exp
= NOexp
);
195 ///////////////////////////////////////////////////////////////////////////////
197 // Class for datatype constructor Def::FUNCTIONdef
199 ///////////////////////////////////////////////////////////////////////////////
200 class Def_FUNCTIONdef
: public a_Def
{
202 #line 41 "setl-ast.ph"
203 Id id
; LabTys args
; Ty return_ty
; Defs local_defs
; Stmts body
;
204 Def_FUNCTIONdef (Id x_id
, LabTys x_args
, Ty x_return_ty
, Defs x_local_defs
, Stmts x_body
);
207 ///////////////////////////////////////////////////////////////////////////////
209 // Class for datatype constructor Def::MODULEdef
211 ///////////////////////////////////////////////////////////////////////////////
212 class Def_MODULEdef
: public a_Def
{
214 #line 47 "setl-ast.ph"
215 Id id
; LabSigs args
; Sig sig
; Defs body
;
216 Def_MODULEdef (Id x_id
, LabSigs x_args
, Sig x_sig
, Defs x_body
);
219 ///////////////////////////////////////////////////////////////////////////////
221 // Class for datatype constructor Def::SIGNATUREdef
223 ///////////////////////////////////////////////////////////////////////////////
224 class Def_SIGNATUREdef
: public a_Def
{
226 #line 52 "setl-ast.ph"
227 Id id
; LabSigs args
; Sig sig
;
228 Def_SIGNATUREdef (Id x_id
, LabSigs x_args
, Sig x_sig
);
231 ///////////////////////////////////////////////////////////////////////////////
233 // Class for datatype constructor Def::TYPEdef
235 ///////////////////////////////////////////////////////////////////////////////
236 class Def_TYPEdef
: public a_Def
{
238 #line 56 "setl-ast.ph"
240 Def_TYPEdef (Decl x_TYPEdef
);
243 ///////////////////////////////////////////////////////////////////////////////
245 // Class for datatype constructor Def::LAMBDAdef
247 ///////////////////////////////////////////////////////////////////////////////
248 class Def_LAMBDAdef
: public a_Def
{
250 #line 57 "setl-ast.ph"
252 Def_LAMBDAdef (LabTys x_1
, Defs x_2
);
255 ///////////////////////////////////////////////////////////////////////////////
257 // Datatype constructor functions for Def
259 ///////////////////////////////////////////////////////////////////////////////
260 extern a_Def
* VARdef (Id x_id
, Ty x_ty
, Exp x_init_exp
= NOexp
);
261 extern a_Def
* FUNCTIONdef (Id x_id
, LabTys x_args
, Ty x_return_ty
, Defs x_local_defs
, Stmts x_body
);
262 extern a_Def
* MODULEdef (Id x_id
, LabSigs x_args
, Sig x_sig
, Defs x_body
);
263 extern a_Def
* SIGNATUREdef (Id x_id
, LabSigs x_args
, Sig x_sig
);
264 extern a_Def
* TYPEdef (Decl x_TYPEdef
);
265 extern a_Def
* LAMBDAdef (LabTys x_1
, Defs x_2
);
267 ///////////////////////////////////////////////////////////////////////////////
269 // Base class for datatype Sig
271 ///////////////////////////////////////////////////////////////////////////////
272 class a_Sig
: public Loc
{
275 tag_IDsig
= 0, tag_DOTsig
= 1, tag_APPsig
= 2,
276 tag_DEFsig
= 3, tag_LAMBDAsig
= 4
280 const Tag_Sig tag__
; // variant tag
282 inline a_Sig(Tag_Sig t__
) : tag__(t__
) {}
285 inline int boxed(const a_Sig
* x
) { return x
!= 0; }
286 inline int untag(const a_Sig
* x
) { return x
? (x
->tag__
+1) : 0; }
287 ///////////////////////////////////////////////////////////////////////////////
289 // Class for datatype constructor Sig::IDsig
291 ///////////////////////////////////////////////////////////////////////////////
292 class Sig_IDsig
: public a_Sig
{
294 #line 66 "setl-ast.ph"
296 Sig_IDsig (Id x_IDsig
);
299 ///////////////////////////////////////////////////////////////////////////////
301 // Class for datatype constructor Sig::DOTsig
303 ///////////////////////////////////////////////////////////////////////////////
304 class Sig_DOTsig
: public a_Sig
{
306 #line 67 "setl-ast.ph"
308 Sig_DOTsig (Sig x_1
, Id x_2
);
311 ///////////////////////////////////////////////////////////////////////////////
313 // Class for datatype constructor Sig::APPsig
315 ///////////////////////////////////////////////////////////////////////////////
316 class Sig_APPsig
: public a_Sig
{
318 #line 68 "setl-ast.ph"
320 Sig_APPsig (Sig x_1
, Sigs x_2
);
323 ///////////////////////////////////////////////////////////////////////////////
325 // Class for datatype constructor Sig::DEFsig
327 ///////////////////////////////////////////////////////////////////////////////
328 class Sig_DEFsig
: public a_Sig
{
330 #line 69 "setl-ast.ph"
332 Sig_DEFsig (Defs x_DEFsig
);
335 ///////////////////////////////////////////////////////////////////////////////
337 // Class for datatype constructor Sig::LAMBDAsig
339 ///////////////////////////////////////////////////////////////////////////////
340 class Sig_LAMBDAsig
: public a_Sig
{
342 #line 70 "setl-ast.ph"
344 Sig_LAMBDAsig (LabSigs x_1
, Sig x_2
);
347 ///////////////////////////////////////////////////////////////////////////////
349 // Datatype constructor functions for Sig
351 ///////////////////////////////////////////////////////////////////////////////
352 extern a_Sig
* IDsig (Id x_IDsig
);
353 extern a_Sig
* DOTsig (Sig x_1
, Id x_2
);
354 extern a_Sig
* APPsig (Sig x_1
, Sigs x_2
);
355 extern a_Sig
* DEFsig (Defs x_DEFsig
);
356 extern a_Sig
* LAMBDAsig (LabSigs x_1
, Sig x_2
);
358 ///////////////////////////////////////////////////////////////////////////////
360 // Base class for datatype Stmt
362 ///////////////////////////////////////////////////////////////////////////////
363 class a_Stmt
: public Loc
{
366 tag_ASSIGNstmt
= 0, tag_BLOCKstmt
= 1, tag_WHILEstmt
= 2,
367 tag_IFstmt
= 3, tag_MATCHstmt
= 4, tag_REWRITEstmt
= 5,
368 tag_REPLACEMENTstmt
= 6, tag_FORALLstmt
= 7, tag_RETURNstmt
= 8
372 const Tag_Stmt tag__
; // variant tag
374 inline a_Stmt(Tag_Stmt t__
) : tag__(t__
) {}
377 inline int boxed(const a_Stmt
* x
) { return x
!= 0; }
378 inline int untag(const a_Stmt
* x
) { return x
? (x
->tag__
+1) : 0; }
379 ///////////////////////////////////////////////////////////////////////////////
381 // Class for datatype constructor Stmt::ASSIGNstmt
383 ///////////////////////////////////////////////////////////////////////////////
384 class Stmt_ASSIGNstmt
: public a_Stmt
{
386 #line 79 "setl-ast.ph"
388 Stmt_ASSIGNstmt (Exp x_1
, Exp x_2
);
391 ///////////////////////////////////////////////////////////////////////////////
393 // Class for datatype constructor Stmt::BLOCKstmt
395 ///////////////////////////////////////////////////////////////////////////////
396 class Stmt_BLOCKstmt
: public a_Stmt
{
398 #line 80 "setl-ast.ph"
400 Stmt_BLOCKstmt (Defs x_1
, Stmts x_2
);
403 ///////////////////////////////////////////////////////////////////////////////
405 // Class for datatype constructor Stmt::WHILEstmt
407 ///////////////////////////////////////////////////////////////////////////////
408 class Stmt_WHILEstmt
: public a_Stmt
{
410 #line 81 "setl-ast.ph"
412 Stmt_WHILEstmt (Exp x_1
, Stmt x_2
);
415 ///////////////////////////////////////////////////////////////////////////////
417 // Class for datatype constructor Stmt::IFstmt
419 ///////////////////////////////////////////////////////////////////////////////
420 class Stmt_IFstmt
: public a_Stmt
{
422 #line 82 "setl-ast.ph"
423 Exp _1
; Stmt _2
; Stmt _3
;
424 Stmt_IFstmt (Exp x_1
, Stmt x_2
, Stmt x_3
);
427 ///////////////////////////////////////////////////////////////////////////////
429 // Class for datatype constructor Stmt::MATCHstmt
431 ///////////////////////////////////////////////////////////////////////////////
432 class Stmt_MATCHstmt
: public a_Stmt
{
434 #line 83 "setl-ast.ph"
436 Stmt_MATCHstmt (Decl x_MATCHstmt
);
439 ///////////////////////////////////////////////////////////////////////////////
441 // Class for datatype constructor Stmt::REWRITEstmt
443 ///////////////////////////////////////////////////////////////////////////////
444 class Stmt_REWRITEstmt
: public a_Stmt
{
446 #line 84 "setl-ast.ph"
448 Stmt_REWRITEstmt (Decl x_REWRITEstmt
);
451 ///////////////////////////////////////////////////////////////////////////////
453 // Class for datatype constructor Stmt::REPLACEMENTstmt
455 ///////////////////////////////////////////////////////////////////////////////
456 class Stmt_REPLACEMENTstmt
: public a_Stmt
{
458 #line 85 "setl-ast.ph"
459 Decl REPLACEMENTstmt
;
460 Stmt_REPLACEMENTstmt (Decl x_REPLACEMENTstmt
);
463 ///////////////////////////////////////////////////////////////////////////////
465 // Class for datatype constructor Stmt::FORALLstmt
467 ///////////////////////////////////////////////////////////////////////////////
468 class Stmt_FORALLstmt
: public a_Stmt
{
470 #line 86 "setl-ast.ph"
471 Generators _1
; Stmt _2
;
472 Stmt_FORALLstmt (Generators x_1
, Stmt x_2
);
475 ///////////////////////////////////////////////////////////////////////////////
477 // Class for datatype constructor Stmt::RETURNstmt
479 ///////////////////////////////////////////////////////////////////////////////
480 class Stmt_RETURNstmt
: public a_Stmt
{
482 #line 87 "setl-ast.ph"
484 Stmt_RETURNstmt (Exp x_RETURNstmt
);
487 ///////////////////////////////////////////////////////////////////////////////
489 // Datatype constructor functions for Stmt
491 ///////////////////////////////////////////////////////////////////////////////
492 extern a_Stmt
* ASSIGNstmt (Exp x_1
, Exp x_2
);
493 extern a_Stmt
* BLOCKstmt (Defs x_1
, Stmts x_2
);
494 extern a_Stmt
* WHILEstmt (Exp x_1
, Stmt x_2
);
495 extern a_Stmt
* IFstmt (Exp x_1
, Stmt x_2
, Stmt x_3
);
496 extern a_Stmt
* MATCHstmt (Decl x_MATCHstmt
);
497 extern a_Stmt
* REWRITEstmt (Decl x_REWRITEstmt
);
498 extern a_Stmt
* REPLACEMENTstmt (Decl x_REPLACEMENTstmt
);
499 extern a_Stmt
* FORALLstmt (Generators x_1
, Stmt x_2
);
500 extern a_Stmt
* RETURNstmt (Exp x_RETURNstmt
);
502 #line 100 "setl-ast.ph"
503 #line 100 "setl-ast.ph"
506 ///////////////////////////////////////////////////////////////////////////////
508 // Pretty printing routines for definitions, statements and generators
510 ///////////////////////////////////////////////////////////////////////////////
511 extern std::ostream
& operator << (std::ostream
&, Def
);
512 extern std::ostream
& operator << (std::ostream
&, Defs
);
513 extern std::ostream
& operator << (std::ostream
&, Sig
);
514 extern std::ostream
& operator << (std::ostream
&, Sigs
);
515 extern std::ostream
& operator << (std::ostream
&, Stmt
);
516 extern std::ostream
& operator << (std::ostream
&, Stmts
);
517 extern std::ostream
& operator << (std::ostream
&, LabSig
);
518 extern std::ostream
& operator << (std::ostream
&, LabSigs
);
519 extern std::ostream
& operator << (std::ostream
&, Generator
);
520 extern std::ostream
& operator << (std::ostream
&, Generators
);
523 #line 119 "setl-ast.ph"
525 ------------------------------- Statistics -------------------------------
526 Merge matching rules = yes
527 Number of DFA nodes merged = 0
528 Number of ifs generated = 0
529 Number of switches generated = 0
532 Adaptive matching = enabled
533 Fast string matching = disabled
534 Inline downcasts = enabled
535 --------------------------------------------------------------------------