📄 traversal.hpp
字号:
// file : Example/Introspection/Traversal/Traversal.hpp
// author : Boris Kolpackov <boris@kolpackov.net>
// copyright : Copyright (c) 2002-2003 Boris Kolpackov
// license : http://kolpackov.net/license.html
#ifndef TRAVERSAL_HPP
#define TRAVERSAL_HPP
#include <map>
#include <iostream>
#include "Utility/Introspection/Introspection.hpp"
#include "SyntaxTree.hpp"
namespace Traversal
{
class Traverser;
//
//
//
class Dispatcher
{
public:
virtual
~Dispatcher ()
{
}
virtual void
dispatch (SyntaxTree::Node* n);
protected:
void
map (Utility::Introspection::TypeId id, Traverser* t)
{
traversal_map_[id] = t;
}
private:
typedef
std::map<Utility::Introspection::TypeId, Traverser*>
TraversalMap;
TraversalMap traversal_map_;
};
//
//
//
class Traverser : public virtual Dispatcher
{
public:
virtual void
traverse (SyntaxTree::Node* n) = 0;
};
//
//
//
struct Node : Traverser
{
Node ()
{
map (typeid (SyntaxTree::Node), this);
}
virtual void
traverse (SyntaxTree::Node*)
{
std::cerr << "node" << std::endl;
}
};
//
//
//
struct Declaration : Traverser
{
Declaration ()
{
map (typeid (SyntaxTree::Declaration), this);
}
virtual void
traverse (SyntaxTree::Node*)
{
std::cerr << "declaration" << std::endl;
}
};
//
//
//
struct Scope : Traverser
{
Scope ()
{
map (typeid (SyntaxTree::Scope), this);
}
virtual void
traverse (SyntaxTree::Node* n)
{
std::cerr << "scope" << std::endl;
SyntaxTree::Scope* s = dynamic_cast<SyntaxTree::Scope*> (n);
for (SyntaxTree::DeclarationList::iterator i = s->content_.begin ();
i != s->content_.end ();
i++)
{
dispatch (*i);
}
}
};
//
//
//
struct InterfaceDecl : Traverser
{
InterfaceDecl ()
{
map (typeid (SyntaxTree::InterfaceDecl), this);
}
virtual void
traverse (SyntaxTree::Node*)
{
std::cerr << "interface declaration" << std::endl;
}
};
//
//
//
struct InterfaceDef : Traverser
{
InterfaceDef ()
{
map (typeid (SyntaxTree::InterfaceDef), this);
}
virtual void
traverse (SyntaxTree::Node*)
{
std::cerr << "interface definition" << std::endl;
}
};
}
#endif // TRAVERSAL_HPP
//Traversal.hpp,v 1.1 2005/05/24 04:33:12 turkaye Exp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -