我想要一个简单的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>
商业产品也可以,但开源(简单)解决方案最好。
答案 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)