本文整理汇总了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);
}
示例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)
* ======================================================
*/
//.........这里部分代码省略.........
示例3: accept
void Callback::accept(TreeVisitor& v)
{
v.visit(this);
}
示例4: accept
void Variable::accept(TreeVisitor& v)
{
v.visit(this);
}
示例5: accept
void BinaryExpression::accept(TreeVisitor& v)
{
v.visit(*this);
}
示例6: Accept
void Accept(TreeVisitor<charT, AddressTable, sentinel>& visitor) { visitor.VisitLocation(this); }
示例7: accept
void ForStatement::accept(TreeVisitor& v)
{
v.visit(this);
}
示例8: accept
void ScriptImport::accept(TreeVisitor& v)
{
v.visit(this);
}
示例9: accept
void Module::accept(TreeVisitor& v)
{
v.visit(*this);
}
示例10: accept
void ModuleImport::accept(TreeVisitor& v)
{
v.visit(this);
}
示例11: accept
void CodeDoc::accept(TreeVisitor& v)
{
v.visit(this);
}
示例12: accept
void RangeExpression::accept(TreeVisitor& v)
{
v.visit(this);
}