【发布时间】:2009-02-09 00:48:13
【问题描述】:
有哪些好的工具可以快速开始解析和分析 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 年以来一直无人维护。通过 Google 搜索可以找到其他基本的 lex/yacc 语法,可以作为起点。
- 还有其他人吗?
我希望以此为起点,将 C/C++ 源代码翻译成一种新的玩具语言。
谢谢! -马特
(添加 2/9):只是澄清一下:除了 C/C++ 代码本身之外,我还想从预处理器中提取语义信息。我不希望“#define foo 42”消失在整数“42”中,但仍与名称“foo”相关联。不幸的是,这排除了几个首先运行预处理器并且只提供 C/C++ 解析树的解决方案)
【问题讨论】:
-
马特,我认为那是一种绝望的希望;根据定义,预处理器在进行分析之前对源进行处理。至少旧的管道编译器在解析之前将 prepoc 的源代码放在管道中。通过第一关。也许你可以使用 cpp 嵌入式 cmets?
-
您可以在源代码上运行您自己的处理器。它将输出一个带注释的源。您需要修改工具用于读取这些注释的 C++ 语法。嘿,涉及到 C++,你知道这并不容易 :)
-
浏览了 42,000 次?我认为这应该重新开放。如果您同意,请点击上方的“重新打开”。
-
我认为这个问题应该重新打开。所有“最佳实践相关问题”都标记为离题,但有些可能具有技术层面、客观原因;这不是一个主观的个人问题。