2016-08-18 48 views
1

我想为C++ \ C头和源代码转换成XML用于分析的简单窗口工具。转换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> 

商业产品也不错,但开源的(简单的)解决方案是最好的。

+1

TinyXml的是一个很好的工具。 [下载TinyXml的](https://www.google.ro/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0ahUKEwi8hbiizcrOAhVSOMAKHc6oBk8QFggrMAM&url=https%3A%2F%2Fsourceforge.net%2Fprojects%2Ftinyxml %2F&usg = AFQjCNEdqxbDbEsPPH3ZUtdP7CHX-BjQyg)和[documentation](http://www.grinninglizard.com/tinyxmldocs/index.html) – Skywrath

回答

1

词语“简单”,“C++”和“工具”并不在同一个句子属于。

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

我们DMS Software Reengineering ToolkitC++14 front end可以做到这一点。 DMS在Windows下运行,其C++前端可以处理C++的ANSI C++ 14,GCC/Clang或Visual Studio方言。

你可以看到在get human readable AST from c++ code DMS通过DMS生产的例子AST的拥有自营出口等的AST为XML,这将满足OP的要求作为明确说明的选项。

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

作为一个实际问题,做的C任何认真的分析++你需要什么相当于符号表信息,你可能会想控制和数据流分析信息。 DMS也可以提供这些。请参阅Life After Parsing