LRDE Tiger Compiler  1.34a $Id: 7fef12e1f5fa43449d667a0eec1d837c40fc1202 $
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
tweast.hh
Go to the documentation of this file.
1 
6 #ifndef PARSE_TWEAST_HH
7 # define PARSE_TWEAST_HH
8 
9 # include <map>
10 # include <iostream>
11 # include <sstream>
12 # include <ast/fwd.hh>
13 # include <misc/symbol.hh>
14 # include <misc/map.hh>
15 # include <parse/metavar-map.hh>
16 
17 namespace parse
18 {
22  class Tweast
23  : public MetavarMap<ast::Exp>
24  , public MetavarMap<ast::Var>
25  , public MetavarMap<ast::NameTy>
26  , public MetavarMap<ast::DecsList>
27  , public MetavarMap<parse::Tweast>
28  {
29  public:
30  Tweast();
31  Tweast(const std::string& str);
32  virtual ~Tweast();
33 
37  template <typename T> Tweast& operator<< (const T& t);
38 
40  template <typename T> T* take(unsigned s);
41 
44  void flatten();
45 
47  std::string input_get() const;
48 
50  std::ostream& dump(std::ostream& ostr) const;
51 
52  protected:
53  // Insert base class append members in the current scope.
59 
61  template <typename T> T& append_(unsigned&, T& data) const;
62 
63  template <typename T>
64  void move_metavars_(Tweast& tweast, std::string& input);
65 
66  protected:
68  static unsigned count_;
69 
71  std::stringstream input_;
72  };
73 
75  std::ostream& operator<< (std::ostream& ostr, const Tweast& in);
76 
77 }
78 
79 # include <parse/tweast.hxx>
80 
81 #endif // !PARSE_TWEAST_HH