我必须检索项目中定义的所有结构和类型(正如我在前面的问题"https://stackoverflow.com/questions/23154414/c-project-get-all-global-variables-and-all-types“中所描述的)。
我选择了clang解决方案,因为这似乎是我唯一的方法.然而,我发现的唯一“好”教程是这个:http://kevinaboos.wordpress.com/2013/07/23/clang-tutorial-part-i-introduction/,还有一些问题:
( 1)是否处理了预处理指令(#include、#define等)
2)如何检索类型和结构成员?
实际上,对于这个*简单的*代码,例如:
typedef struct
{
int i;
char i2;
} S1;
typedef struct S2
{
int i;
struct S2 s2;
} S2;
typedef S3 struct S3;
struct S3
{
int i;
char i2;
}
S1 m_s1;
S2 m_s2;
struct S3 m_s3;调用clang::RecursiveASTVisitor-derived类(1RecursiveASTVisitor.html)的方法是什么?(你能解释一下如何检索我需要的数据吗?)
发布于 2014-04-25 07:36:58
好吧,按照马特·彼得森的建议,我做了实验。
1)是的,AST是在预处理器之后生成的。它允许检索所有的信息。
2) AST的遍历是深度优先。与其实现VisitFoo(Foo *)方法,不如重新实现TraverseFoo(Foo *)方法以获取每个节点查找的开始和结束:
class YourVisitor : public RecursiveASTVisitor<YourVisitor>
{
//...
virtual bool TraverseFoo(Foo * f)
{
//Some stuff to do before to explore the children
bool r = RecursiveASTVisitor<YourVisitor>::TraverseFoo(f);
//Some stuff to do after
return r
}
}然后,要获取结构(=记录)及其成员,只需重新实现TraverseRecordDecl来处理struct,VisitFieldDecl就可以获得字段。
https://stackoverflow.com/questions/23207497
复制相似问题