有什么好的工具可以快速开始解析和分析C/C++代码?
特别是,我正在寻找处理C/C++预处理器和语言的开源工具.优选地,这些工具将使用lex/yacc(或flex/bison)用于语法,并且不会太复杂.他们应该处理最新的ANSI C/C++定义.
这是我到目前为止所发现的,但没有详细查看它们(想法?):
我希望将此作为将C/C++源代码翻译成新玩具语言的起点.
谢谢!-Matt
(已添加2/9):只是澄清:除了C/C++代码本身之外,我还希望从预处理器中提取语义信息.我不希望"#define foo 42"消失在整数"42"中,但仍然附加到名称"foo".不幸的是,这排除了几个首先运行预处理器并且只提供C/C++解析树的解决方案.
我的情况是我的代码中有几个不同的结构,我想要打印到控制台.
三个例子(几百个):
typedef struct ReqCntrlT /* Request control record */
{
int connectionID;
int dbApplID;
char appDescr[MAX_APPDSCR];
int reqID;
int resubmitFlag;
unsigned int resubmitNo;
char VCIver[MAX_VCIVER];
int loginID;
} ReqCntrlT;
//---------------------------------------------
typedef struct /* Connection request data block */
{
char userID[MAX_USRID];
char password[MAX_PWDID];
} CnctReqDataT;
//---------------------------------------------
typedef struct {
char userID[LOGIN_MAX_USERID];
char closure;
int applVersion;
int authorizationDataLength;
void *authorizationData; } LoginReqDataT;
Run Code Online (Sandbox Code Playgroud)
所以我想拥有的是一个调试函数,它只需要一个struct作为Parameter并输出结构的所有成员,如下所示:
LoginReqDataT* foo = new LoginReqDataT;
foo->applVersion = 123;
//...
debugPrintMe(foo);
CnctReqDataT* bar = new CnctReqDataT;
strcpy(bar->userID, "123"); …Run Code Online (Sandbox Code Playgroud)