2016-08-18 87 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