相关疑难解决方法(0)

用于创建C/C++解析器/分析器的好工具

有什么好的工具可以快速开始解析和分析C/C++代码?

特别是,我正在寻找处理C/C++预处理器和语言的开源工具.优选地,这些工具将使用lex/yacc(或flex/bison)用于语法,并且不会太复杂.他们应该处理最新的ANSI C/C++定义.

这是我到目前为止所发现的,但没有详细查看它们(想法?):

  • CScope - 老式C分析仪.但是,似乎没有做完整的解析.被描述为寻找C函数的美化'grep'.
  • GCC - 每个人最喜欢的开源编译器.非常复杂,但似乎做到了这一切.有一个相关项目用于创建名为GEM的 GCC扩展,但自GCC 4.1(2006)以来尚未更新.
  • PUMA - PUre MAnipulator.(来自页面:"这个项目的目的是提供一个用于分析和操作C/C++源代码的类库.为此,PUMA提供了用于扫描,解析和操作C/C++源代码的类.") .这看起来很有希望,但自2001年以来一直没有更新.显然PUMA已被纳入AspectC++,但即使这个项目自2006年以来也没有更新.
  • 各种C/C++原始语法.你可以得到c-c ++ - grammars-1.2.tar.gz,但自1997年以来一直没有得到维护.谷歌的一些搜索引出了其他可以作为起点的基本lex/yacc语法.
  • 还有其他人?

我希望将此作为将C/C++源代码翻译成新玩具语言的起点.

谢谢!-Matt

(已添加2/9):只是澄清:除了C/C++代码本身之外,我还希望从预处理器中提取语义信息.我不希望"#define foo 42"消失在整数"42"中,但仍然附加到名称"foo".不幸的是,这排除了几个首先运行预处理器并且只提供C/C++解析树的解决方案.

c c++ parsing yacc lex

49
推荐指数
8
解决办法
6万
查看次数

一个Debug-Print功能可以统治它们

我的情况是我的代码中有几个不同的结构,我想要打印到控制台.

三个例子(几百个):

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)

c++ debugging templates struct casting

2
推荐指数
1
解决办法
1881
查看次数

标签 统计

c++ ×2

c ×1

casting ×1

debugging ×1

lex ×1

parsing ×1

struct ×1

templates ×1

yacc ×1