在clang AST消费者中,我有一个用于FunctionDecl的步行器。如何在函数声明中遍历 DeclStmt、语句、BinaryOperator。请举例说明。
问题中的信息不多。通过一个示例来说明您希望通过这种类型的遍历完成什么,它会更清楚。因此,有了这么多信息,我只能在这里建议最通用的解决方案。
Clang为AST访客和穿越者提供了一些课程。访问者是模式的典型代表,而遍历者是遍历每个节点的子节点的访问者。主要的遍历器是RecursiveASTVisitor。您可以在手册或文档中阅读有关它的信息。
下面是一个示例:
class Traverser : public RecursiveASTVisitor<Traverser> {
public:
bool VisitFunctionDecl(FunctionDecl *D) {
D->dump();
return true;
}
bool VisitDeclStmt(DeclStmt *DS) {
DS->dump();
return true;
}
bool VisitBinaryOperator(BinaryOperator *BO) {
BO->dump();
return true;
}
};
此解决方案将访问任何函数声明、声明语句和二进制表达式。如果你想要更优化的方法,你可以通过重新定义遍历*方法等来调整遍历。如果不是这种情况,您始终可以使用 StmtVisitor、DeclVisitor、TypeVisitor 和 TypeLocVisitor 实现自己的遍历器。
我希望这些信息对您有用,并且对您有所帮助。与叮当一起快乐!