将c ++代码转换为xml文件以进行代码分析

时间:2016-08-18 08:21:33

标签: c++ xml code-analysis

我想要一个简单的Windows工具,用于将c ++ \ c标头和源代码转换为xml进行分析。

例如,

#include "something.h"
void CSomething::CheckIt(DWORD x)
{
    if (x > 1)
    { 
       // Do something
    }
}

将转换为

<XML>
<CodeFile>
<IncludeCommand filename="something.h"/>

<Function namespace="CSomething" name="CheckIt" returnType="void"/>
<Arguments>
<Argument name="x" type="DWORD" />
</Arguments>
<Body>
<IfCondition>
<Expression ... />
<Body>
...
</Body>
</IfCondition>
</Body>
</Function>

</CodeFile>

商业产品也可以,但开源(简单)解决方案最好。

2 个答案:

答案 0 :(得分:2)

“简单”,“C ++”和“工具”这两个词不属于同一句话。

如果你想分析C ++代码,你可能想要准确的答案,这需要准确的解析器。

我们的DMS Software Reengineering Toolkit及其C++14 front end可以执行此操作。 DMS在Windows下运行,其C ++前端可以处理C ++的ANSI C ++ 14,GCC / Clang或Visual Studio方言。

您可以在get human readable AST from c++ code看到DMS生成的示例AST DMS可以选择将这些AST导出为XML,这将满足OP明确规定的请求。

他可能并不真的想要这个。对于任何严重大小的源代码块,这样的XML文件都是巨大的。千行C ++程序将产生大约10,000行/ 500K字符的XML输出。这对于产生/读取/处理来说是笨拙的。如果包含典型的头文件,则可以轻松达到100K行的C ++代码;如果你把它们排除在外,你就无法很好地分析代码。 DMS本身提供了许多机制来导航它生成的AST;使用DMS提供的机器编写分析器比重新创建所有这些以使用XML更容易。

实际上,要对C ++进行任何认真的分析,您需要的是符号表信息,您可能需要控制和数据流分析信息。 DMS也可以提供这些。请参阅Life After Parsing

答案 1 :(得分:1)

查看gcc_xml然后继续其继任者CastXML