特别是,我在寻找处理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++ 源代码翻译成一种新的玩具语言的起点。
谢谢! -Matt
(添加于 2/9):只是一个澄清:我希望从预处理器中提取语义信息,除了 C/C++ 代码本身。我不想让 "#define foo 42" 消失到整数 "42" 中,而是保持与名称 "foo" 相关联。这使得几个运行预处理器后仅提供 C/C++ 解析树的解决方案被排除在外。