cymoca
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
walker.h
Go to the documentation of this file.
1 #ifndef CYMOCA_AST_WALKER_H_
2 #define CYMOCA_AST_WALKER_H_
3 
4 #include "listener/listener.h"
5 #include "node.h"
6 
7 namespace cymoca::ast {
8 
9 class Walker {
10  public:
11  void walk(INode *tree, listener::Base &listener) {
12  assert(tree);
13  listener.enterEvery(tree);
14  tree->enter(listener);
15  for (auto &c : tree->getChildren()) {
16  assert(c);
17  walk(c, listener);
18  }
19  tree->exit(listener);
20  listener.exitEvery(tree);
21  }
22 };
23 
24 } // namespace cymoca::ast
25 #endif
virtual void exitEvery(INode *)
Definition: listener.h:73
virtual std::vector< INode * > getChildren()=0
void walk(INode *tree, listener::Base &listener)
Definition: walker.h:11
virtual void enterEvery(INode *)
Definition: listener.h:72
virtual void enter(listener::Base &listener)=0
virtual void exit(listener::Base &listener)=0