当前位置: 首页>>代码示例>>C++>>正文


C++ TreeVisitor类代码示例

本文整理汇总了C++中TreeVisitor的典型用法代码示例。如果您正苦于以下问题:C++ TreeVisitor类的具体用法?C++ TreeVisitor怎么用?C++ TreeVisitor使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了TreeVisitor类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: traverse_tree

 void traverse_tree(typename tree_traits<Tree>::node_descriptor v,
                    Tree& t, TreeVisitor visitor)
 {
   visitor.preorder(v, t);
   typename tree_traits<Tree>::children_iterator i, end;
   tie(i, end) = children(v, t);
   if (i != end) {
     traverse_tree(*i++, t, visitor);
     visitor.inorder(v, t);
     while (i != end)
       traverse_tree(*i++, t, visitor);
   } else
     visitor.inorder(v, t);
   visitor.postorder(v, t);
 }
开发者ID:4eek,项目名称:xtractorfan,代码行数:15,代码来源:tree_traits.hpp

示例2: getCalledRoutinesInStatement

void
FortranCUDAUserSubroutine::createStatements ()
{
  using namespace SageInterface;
  using boost::iequals;
  using std::string;
  using std::vector;
  
  class TreeVisitor: public AstSimpleProcessing
  {
    private:
    /*
     * ======================================================
     * The recursive visit of a user subroutine populates
     * this vector with successive function calls which are
     * then appended after the visit
     * ======================================================
     */            
    vector < SgProcedureHeaderStatement * > calledRoutines;

    public:

      vector < SgProcedureHeaderStatement * > getCalledRoutinesInStatement()
      {
        return calledRoutines;
      }
      
      TreeVisitor ()
      {
      }

      virtual void
      visit (SgNode * node)
      {
        SgExprStatement * isExprStatement = isSgExprStatement ( node );
        if ( isExprStatement != NULL )
        {      
          SgFunctionCallExp * functionCallExp = isSgFunctionCallExp ( isExprStatement->get_expression() );
        
          if ( functionCallExp != NULL )
          {
            string const
                calleeName =
                    functionCallExp->getAssociatedFunctionSymbol ()->get_name ().getString ();

            Debug::getInstance ()->debugMessage ("Found function call in user subroutine "
                + calleeName + "'", Debug::OUTER_LOOP_LEVEL, __FILE__, __LINE__);

            /*
             * ======================================================
             * As we are in fortran, all user subroutines must be
             * SgProcedureHeaderStatements = subroutines and not
             * functions. This might be extended to cover also 
             * functions in the future (?). Probably not in OP2
             * ======================================================
             */
            SgProcedureHeaderStatement * isProcedureHeaderStatement = isSgProcedureHeaderStatement ( 
              functionCallExp->getAssociatedFunctionDeclaration() );

            calledRoutines.push_back ( isProcedureHeaderStatement );
          }
        }
      }
  };
  
  Debug::getInstance ()->debugMessage ("User subroutine: outputting and modifying statements",
      Debug::FUNCTION_LEVEL, __FILE__, __LINE__);

  SgFunctionParameterList * originalParameters =
      originalSubroutine->get_parameterList ();

  vector <SgStatement *> originalStatements =
      originalSubroutine->get_definition ()->get_body ()->get_statements ();

  for (vector <SgStatement *>::iterator it = originalStatements.begin (); it
      != originalStatements.end (); ++it)
  {      
 
    SgExprStatement * isExprStatement = isSgExprStatement ( *it );
    if ( isExprStatement != NULL )
    {      
      SgFunctionCallExp * functionCallExp = isSgFunctionCallExp ( isExprStatement->get_expression() );
    
      if ( functionCallExp != NULL )
      {
        string const
            calleeName =
                functionCallExp->getAssociatedFunctionSymbol ()->get_name ().getString ();

        Debug::getInstance ()->debugMessage ("Found function call in user subroutine "
            + calleeName + "'", Debug::OUTER_LOOP_LEVEL, __FILE__, __LINE__);

        /*
         * ======================================================
         * As we are in fortran, all user subroutines must be
         * SgProcedureHeaderStatements = subroutines and not
         * functions. This might be extended to cover also 
         * functions in the future (probably not in OP2)
         * ======================================================
         */            
//.........这里部分代码省略.........
开发者ID:OP2,项目名称:OP2_ROSE_Fortran,代码行数:101,代码来源:FortranCUDAUserSubroutine.cpp

示例3: accept

void Callback::accept(TreeVisitor& v)
{
	v.visit(this);
}
开发者ID:Sciumo,项目名称:RapCAD,代码行数:4,代码来源:callback.cpp

示例4: accept

void Variable::accept(TreeVisitor& v)
{
	v.visit(this);
}
开发者ID:Klatticus,项目名称:RapCAD,代码行数:4,代码来源:variable.cpp

示例5: accept

void BinaryExpression::accept(TreeVisitor& v)
{
	v.visit(*this);
}
开发者ID:GilesBathgate,项目名称:RapCAD,代码行数:4,代码来源:binaryexpression.cpp

示例6: Accept

 void Accept(TreeVisitor<charT, AddressTable, sentinel>& visitor) { visitor.VisitLocation(this); }
开发者ID:theonlybars,项目名称:ForCV,代码行数:1,代码来源:interface.cpp

示例7: accept

void ForStatement::accept(TreeVisitor& v)
{
	v.visit(this);
}
开发者ID:Klatticus,项目名称:RapCAD,代码行数:4,代码来源:forstatement.cpp

示例8: accept

void ScriptImport::accept(TreeVisitor& v)
{
	v.visit(this);
}
开发者ID:Sciumo,项目名称:RapCAD,代码行数:4,代码来源:scriptimport.cpp

示例9: accept

void Module::accept(TreeVisitor& v)
{
	v.visit(*this);
}
开发者ID:GilesBathgate,项目名称:RapCAD,代码行数:4,代码来源:module.cpp

示例10: accept

void ModuleImport::accept(TreeVisitor& v)
{
	v.visit(this);
}
开发者ID:Sciumo,项目名称:RapCAD,代码行数:4,代码来源:moduleimport.cpp

示例11: accept

void CodeDoc::accept(TreeVisitor& v)
{
	v.visit(this);
}
开发者ID:Klatticus,项目名称:RapCAD,代码行数:4,代码来源:codedoc.cpp

示例12: accept

void RangeExpression::accept(TreeVisitor& v)
{
	v.visit(this);
}
开发者ID:Sciumo,项目名称:RapCAD,代码行数:4,代码来源:rangeexpression.cpp


注:本文中的TreeVisitor类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。