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 "grsgen.ph".
5 ///////////////////////////////////////////////////////////////////////////////
8 ///////////////////////////////////////////////////////////////////////////////
10 // This file describes the graph rewriting system compiler.
12 ///////////////////////////////////////////////////////////////////////////////
13 #ifndef graph_rewriting_system_compiler_h
14 #define graph_rewriting_system_compiler_h
20 ///////////////////////////////////////////////////////////////////////////////
22 // Forward type declarations
24 ///////////////////////////////////////////////////////////////////////////////
27 ///////////////////////////////////////////////////////////////////////////////
29 // Forward class definition for Pat
31 ///////////////////////////////////////////////////////////////////////////////
32 #ifndef datatype_Pat_defined
33 #define datatype_Pat_defined
38 ///////////////////////////////////////////////////////////////////////////////
40 // Forward class definition for Exp
42 ///////////////////////////////////////////////////////////////////////////////
43 #ifndef datatype_Exp_defined
44 #define datatype_Exp_defined
49 ///////////////////////////////////////////////////////////////////////////////
51 // Forward class definition for Decl
53 ///////////////////////////////////////////////////////////////////////////////
54 #ifndef datatype_Decl_defined
55 #define datatype_Decl_defined
57 typedef a_Decl
* Decl
;
64 ///////////////////////////////////////////////////////////////////////////////
66 // Abstract syntax for graph rewriting rules
68 ///////////////////////////////////////////////////////////////////////////////
71 ///////////////////////////////////////////////////////////////////////////////
73 // Forward class definition for GraphRewritingRule
75 ///////////////////////////////////////////////////////////////////////////////
76 #ifndef datatype_GraphRewritingRule_defined
77 #define datatype_GraphRewritingRule_defined
78 class a_GraphRewritingRule
;
79 typedef a_GraphRewritingRule
* GraphRewritingRule
;
82 ///////////////////////////////////////////////////////////////////////////////
84 // Forward class definition for GRSPat
86 ///////////////////////////////////////////////////////////////////////////////
87 #ifndef datatype_GRSPat_defined
88 #define datatype_GRSPat_defined
90 typedef a_GRSPat
* GRSPat
;
93 ///////////////////////////////////////////////////////////////////////////////
95 // Forward class definition for GRSConclusion
97 ///////////////////////////////////////////////////////////////////////////////
98 #ifndef datatype_GRSConclusion_defined
99 #define datatype_GRSConclusion_defined
100 class a_GRSConclusion
;
101 typedef a_GRSConclusion
* GRSConclusion
;
104 ///////////////////////////////////////////////////////////////////////////////
105 // Definition of type GRSConclusions
106 ///////////////////////////////////////////////////////////////////////////////
108 typedef a_List
<GRSConclusion
> * GRSConclusions
;
110 ///////////////////////////////////////////////////////////////////////////////
112 // Class for datatype constructor GraphRewritingRule::GRSrule
114 ///////////////////////////////////////////////////////////////////////////////
115 class a_GraphRewritingRule
: public Loc
{
118 GRSPat lhs
; GRSConclusions rhs
;
119 a_GraphRewritingRule (GRSPat x_lhs
, GRSConclusions x_rhs
);
121 inline int boxed(const a_GraphRewritingRule
*) { return 1; }
122 inline int untag(const a_GraphRewritingRule
*) { return 0; }
123 ///////////////////////////////////////////////////////////////////////////////
125 // Datatype constructor functions for GraphRewritingRule
127 ///////////////////////////////////////////////////////////////////////////////
128 extern a_GraphRewritingRule
* GRSrule (GRSPat x_lhs
, GRSConclusions x_rhs
);
130 ///////////////////////////////////////////////////////////////////////////////
132 // Base class for datatype GRSPat
134 ///////////////////////////////////////////////////////////////////////////////
135 class a_GRSPat
: public Loc
{
138 tag_EDGEgpat
= 0, tag_GUARDgpat
= 1, tag_NOTgpat
= 2,
139 tag_ANDgpat
= 3, tag_ORgpat
= 4, tag_FORALLgpat
= 5
143 const Tag_GRSPat tag__
; // variant tag
145 inline a_GRSPat(Tag_GRSPat t__
) : tag__(t__
) {}
148 inline int boxed(const a_GRSPat
*) { return 1; }
149 inline int untag(const a_GRSPat
* x
) { return x
->tag__
; }
150 ///////////////////////////////////////////////////////////////////////////////
152 // Class for datatype constructor GRSPat::EDGEgpat
154 ///////////////////////////////////////////////////////////////////////////////
155 class GRSPat_EDGEgpat
: public a_GRSPat
{
158 Id _1
; a_List
<Pat
> * _2
;
159 GRSPat_EDGEgpat (Id x_1
, a_List
<Pat
> * x_2
);
162 ///////////////////////////////////////////////////////////////////////////////
164 // Class for datatype constructor GRSPat::GUARDgpat
166 ///////////////////////////////////////////////////////////////////////////////
167 class GRSPat_GUARDgpat
: public a_GRSPat
{
171 GRSPat_GUARDgpat (Exp x_GUARDgpat
);
174 ///////////////////////////////////////////////////////////////////////////////
176 // Class for datatype constructor GRSPat::NOTgpat
178 ///////////////////////////////////////////////////////////////////////////////
179 class GRSPat_NOTgpat
: public a_GRSPat
{
183 GRSPat_NOTgpat (GRSPat x_NOTgpat
);
186 ///////////////////////////////////////////////////////////////////////////////
188 // Class for datatype constructor GRSPat::ANDgpat
190 ///////////////////////////////////////////////////////////////////////////////
191 class GRSPat_ANDgpat
: public a_GRSPat
{
194 GRSPat _1
; GRSPat _2
;
195 GRSPat_ANDgpat (GRSPat x_1
, GRSPat x_2
);
198 ///////////////////////////////////////////////////////////////////////////////
200 // Class for datatype constructor GRSPat::ORgpat
202 ///////////////////////////////////////////////////////////////////////////////
203 class GRSPat_ORgpat
: public a_GRSPat
{
206 GRSPat _1
; GRSPat _2
;
207 GRSPat_ORgpat (GRSPat x_1
, GRSPat x_2
);
210 ///////////////////////////////////////////////////////////////////////////////
212 // Class for datatype constructor GRSPat::FORALLgpat
214 ///////////////////////////////////////////////////////////////////////////////
215 class GRSPat_FORALLgpat
: public a_GRSPat
{
219 GRSPat_FORALLgpat (Id x_1
, GRSPat x_2
);
222 ///////////////////////////////////////////////////////////////////////////////
224 // Datatype constructor functions for GRSPat
226 ///////////////////////////////////////////////////////////////////////////////
227 extern a_GRSPat
* EDGEgpat (Id x_1
, a_List
<Pat
> * x_2
);
228 extern a_GRSPat
* GUARDgpat (Exp x_GUARDgpat
);
229 extern a_GRSPat
* NOTgpat (GRSPat x_NOTgpat
);
230 extern a_GRSPat
* ANDgpat (GRSPat x_1
, GRSPat x_2
);
231 extern a_GRSPat
* ORgpat (GRSPat x_1
, GRSPat x_2
);
232 extern a_GRSPat
* FORALLgpat (Id x_1
, GRSPat x_2
);
234 ///////////////////////////////////////////////////////////////////////////////
236 // Base class for datatype GRSConclusion
238 ///////////////////////////////////////////////////////////////////////////////
239 class a_GRSConclusion
: public Loc
{
241 enum Tag_GRSConclusion
{
242 tag_ADDEDGEaction
= 0, tag_DELETEEDGEaction
= 1, tag_ADDNODEaction
= 2,
243 tag_DELETENODEaction
= 3, tag_EMBEDDEDaction
= 4
247 const Tag_GRSConclusion tag__
; // variant tag
249 inline a_GRSConclusion(Tag_GRSConclusion t__
) : tag__(t__
) {}
252 inline int boxed(const a_GRSConclusion
*) { return 1; }
253 inline int untag(const a_GRSConclusion
* x
) { return x
->tag__
; }
254 ///////////////////////////////////////////////////////////////////////////////
256 // Class for datatype constructor GRSConclusion::ADDEDGEaction
258 ///////////////////////////////////////////////////////////////////////////////
259 class GRSConclusion_ADDEDGEaction
: public a_GRSConclusion
{
262 Id _1
; a_List
<Exp
> * _2
;
263 GRSConclusion_ADDEDGEaction (Id x_1
, a_List
<Exp
> * x_2
);
266 ///////////////////////////////////////////////////////////////////////////////
268 // Class for datatype constructor GRSConclusion::DELETEEDGEaction
270 ///////////////////////////////////////////////////////////////////////////////
271 class GRSConclusion_DELETEEDGEaction
: public a_GRSConclusion
{
274 Id _1
; a_List
<Exp
> * _2
;
275 GRSConclusion_DELETEEDGEaction (Id x_1
, a_List
<Exp
> * x_2
);
278 ///////////////////////////////////////////////////////////////////////////////
280 // Class for datatype constructor GRSConclusion::ADDNODEaction
282 ///////////////////////////////////////////////////////////////////////////////
283 class GRSConclusion_ADDNODEaction
: public a_GRSConclusion
{
287 GRSConclusion_ADDNODEaction (Exp x_ADDNODEaction
);
290 ///////////////////////////////////////////////////////////////////////////////
292 // Class for datatype constructor GRSConclusion::DELETENODEaction
294 ///////////////////////////////////////////////////////////////////////////////
295 class GRSConclusion_DELETENODEaction
: public a_GRSConclusion
{
298 Exp DELETENODEaction
;
299 GRSConclusion_DELETENODEaction (Exp x_DELETENODEaction
);
302 ///////////////////////////////////////////////////////////////////////////////
304 // Class for datatype constructor GRSConclusion::EMBEDDEDaction
306 ///////////////////////////////////////////////////////////////////////////////
307 class GRSConclusion_EMBEDDEDaction
: public a_GRSConclusion
{
310 a_List
<Decl
> * EMBEDDEDaction
;
311 GRSConclusion_EMBEDDEDaction (a_List
<Decl
> * x_EMBEDDEDaction
);
314 ///////////////////////////////////////////////////////////////////////////////
316 // Datatype constructor functions for GRSConclusion
318 ///////////////////////////////////////////////////////////////////////////////
319 extern a_GRSConclusion
* ADDEDGEaction (Id x_1
, a_List
<Exp
> * x_2
);
320 extern a_GRSConclusion
* DELETEEDGEaction (Id x_1
, a_List
<Exp
> * x_2
);
321 extern a_GRSConclusion
* ADDNODEaction (Exp x_ADDNODEaction
);
322 extern a_GRSConclusion
* DELETENODEaction (Exp x_DELETENODEaction
);
323 extern a_GRSConclusion
* EMBEDDEDaction (a_List
<Decl
> * x_EMBEDDEDaction
);
329 ///////////////////////////////////////////////////////////////////////////////
331 // The interface to the graph rewriting system compiler
333 ///////////////////////////////////////////////////////////////////////////////
334 class GraphRewritingCompiler
: virtual public CodeGen
,
335 virtual public MatchCompiler
336 { GraphRewritingCompiler(const GraphRewritingCompiler
&);
337 void operator = (const GraphRewritingCompiler
&);
339 GraphRewritingCompiler();
340 ~GraphRewritingCompiler();
342 void gen_graph_rewriting_system (Id
, LabTys
,
344 a_List
<GraphRewritingRule
> *
351 ------------------------------- Statistics -------------------------------
352 Merge matching rules = yes
353 Number of DFA nodes merged = 0
354 Number of ifs generated = 0
355 Number of switches generated = 0
358 Adaptive matching = enabled
359 Fast string matching = disabled
360 Inline downcasts = enabled
361 --------------------------------------------------------------------------