代码翻译-任何具有C输出的C编译器



我们都知道C编译器会吐出汇编。

然而,我正在进行研究,我的工具只接受ANSI C的一小部分。有没有C到C转换器可以内联函数或压平结构,但写出C代码?

任何其他可以简化C代码的工具,让我听听。

LLVM支持这样的功能。

如果不要求生成的C代码具有特殊的可读性,可以使用常规编译器生成二进制可执行文件,然后使用反编译器从二进制文件中生成C代码。反编译器很可能无法"解行"编译器内联的函数。虽然不确定结构,但如果你在没有调试符号的情况下编译,并使用不太复杂的反编译器,它可能根本检测不到结构。

Clang可以从互联网上的各种来源将其AST翻译回C。

旧的MIT项目C2C(在FTP上运行了一段时间)和新的Cilk为您提供了运行C->AST->C进程的可能性。

Cilk和Cilk++得到积极维护。它们包括一个非常好的ANSI C解析器。

我们的DMS软件重组工具包及其C前端可以做到这一点。

DMS提供了用于解析、构建AST、符号表、一般分析AST的通用机制,以及用于控制/数据流/指向/值范围的特定分析器,以及按程序或使用模式正确转换AST,以及重新生成包括注释在内的源文本。DMS同时处理多个编译单元的能力允许同时影响多个编译单位的全局分析和转换。

DMS的C前端专门用于C(它有用于各种其他语言的前端)。它处理各种方言,包括ANSI、GCC 3/4、MS Visual C和Green Hills C;它可以根据需要为其他方言进行定制。

DMS已被用于各种C分析/转换项目,包括分析一个2600万线的软件系统。

DMS的一个有趣的应用程序是在指针错误发生时(而不是遭受长时间延迟的崩溃)对C源进行检测以捕获指针错误;请参阅我们的CheckPointer工具。这个工具读取源代码,插入额外的代码来检查每个指针的访问,然后写出结果。在这个过程中,它将C代码规范化为一个简化的子集,以消除许多特殊情况。这种规范化可能非常接近OP想要做的事情。

最新更新