有哪些好的工具可以快速开始解析和分析 C/C++ 代码?
特别是,我正在寻找处理 C/C++ 预处理器和语言的开源工具。这些工具最好使用 lex/yacc(或 flex/bison)作为语法,不要太复杂。他们应该处理最新的 ANSI C/C++ 定义。
这是我到目前为止发现的,但还没有详细研究它们(想法?):
- CScope - 老式 C 分析器。不过,似乎没有进行完整的解析。被描述为用于查找 C 函数的美化“grep”。
- GCC - 每个人都喜欢的开源编译器。非常复杂,但似乎可以做到这一切。有一个用于创建 GCC 扩展的相关项目称为GEM,但自 GCC 4.1 (2006) 以来尚未更新。
- PUMA - 纯机械手。(来自页面:“该项目的目的是提供一个类库,用于分析和操作 C/C++ 源。为此,PUMA 提供了用于扫描、解析和操作 C/C++ 源的类。”) . 这看起来很有希望,但自 2001 年以来一直没有更新。显然 PUMA 已被合并到AspectC++中,但即使是这个项目自 2006 年以来也没有更新过。
- 各种 C/C++ 原始语法。你可以得到c-c++-grammars-1.2.tar.gz,但它自 1997 年以来一直无人维护。谷歌搜索一下就可以找到其他可以作为起点的基本 lex/yacc 语法。
- 还有其他人吗?
我希望以此为起点,将 C/C++ 源代码翻译成新的玩具语言。
谢谢!-马特
(添加 2/9):只是澄清一下:除了 C/C++ 代码本身之外,我还想从预处理器中提取语义信息。我不希望“#define foo 42”消失在整数“42”中,但仍与名称“foo”相关联。不幸的是,这排除了几个首先运行预处理器并且只提供 C/C++ 解析树的解决方案)