1 ///////////////////////////////////////////////////////////////////////////////
3 // This file describes the interface of the rewriting compiler.
5 ///////////////////////////////////////////////////////////////////////////////
6 #ifndef rewriting_compiler_h
7 #define rewriting_compiler_h
14 ///////////////////////////////////////////////////////////////////////////////
16 // The rewriting compiler is inherited from the pattern matcher.
18 ///////////////////////////////////////////////////////////////////////////////
19 class RewritingCompiler : virtual public CodeGen,
20 virtual public MatchCompiler
22 RewritingCompiler(const RewritingCompiler&); // no copy constructor
23 void operator = (const RewritingCompiler&); // no assignment
27 Decls rewriters; // outstanding rewriting declarations.
30 ////////////////////////////////////////////////////////////////////////////
31 // Constructor and destructor
32 ////////////////////////////////////////////////////////////////////////////
33 RewritingCompiler(ostream&);
34 virtual ~RewritingCompiler();
37 ////////////////////////////////////////////////////////////////////////////
38 // Methods for compiling rewriting
39 ////////////////////////////////////////////////////////////////////////////
41 // generate a set of rewrite rules
42 void gen_rewrite (Id, MatchRules);
44 // generate a rewrite statement
45 void gen_rewriting(Protocols, Exp, Exp, MatchRules, TyQual);
47 // generate a set of outstanding rewrite statements
50 ////////////////////////////////////////////////////////////////////////////
51 // Methods for compiling a topdown tree pattern matcher
52 ////////////////////////////////////////////////////////////////////////////
53 void gen_topdown (Id, MatchRules, int, Protocols, FunctorMap&,
54 TyQual, TreeGrammar&, Id [], Id []);
55 void gen_topdown_driver (Id, MatchRules, FunctorMap&);
57 ////////////////////////////////////////////////////////////////////////////
58 // Methods for compiling a bottomup tree pattern matcher
59 ////////////////////////////////////////////////////////////////////////////
60 void gen_bottomup (Id, MatchRules, int, Protocols, FunctorMap&,
61 TyQual, TreeGrammar&, Id [], Id []);
62 void gen_bottomup_literal (Id, TyQual, Ty, FunctorMap&);
63 void gen_bottomup_datatype (Id, TyQual, Ty, FunctorMap&);
64 void gen_datatype_traversal(FunctorMap&, Ty);
65 int gen_pattern_traversal (FunctorMap&, Pat, int);