我在一个项目中工作,我想在C++中进行反射,所以经过研究,我发现最好的方法是解析头文件以获取XML格式的抽象语法树并在反射中使用它。我尝试了很多工具,但没有一个与coco,cint,gccxml等visual C++ 2008或visual C++ 2010兼容。请尽快重播如何解析C++头文件的集合?
回答
Visual Studio已经解析了项目中的所有代码(智能感知功能)。您可以使用Visual C++ Code Model进行访问。
我们的C++ front end能够解析许多C++的方言,包括GNU和MS。它为AST和符号表建立了编译器数据结构,并提供了为C++“做反射”所需的信息。将分析树导出为XML文档相当简单。符号表信息可以通过遍历符号结构以XML形式导出。
人们总是希望XML格式的AST和符号表数据,我猜想他们可以将其读入DOM结构或使用XSLT操纵它。这个想法有两个严重的缺陷:1)XML数据的庞大数量是巨大的,生成/重读它只是增加了很多时间2)使这些结构可用会使得“容易”做...某事...
我们认为人们真正想要做的是分析代码和/或转换代码(通常基于分析)。这就要求该工具无论是以何种方式提供对程序结构的访问权限,以便“更容易”分析和转换。例如,如果您决定修改AST,您将如何重新生成源文本?
我们已经构建了DMS Software Reengineering Toolkit,以提供解析,分析,转换,相容性(“再生源”)的一种通用支持。 DMS具有各种语言(C++,C,Java,COBOL,Python等)的前端,并提供了一组有用的标准服务,用于在代码上构建自定义分析器/转换。冒着大胆冒险的风险,我们花了很长时间考虑实施有用的机制来涵盖这些任务,就像MS花了很长时间来确定Windows应该是什么一样。你可以尝试复制这种机制,但期望它的成本很高(我们一直在为DMS工作15年),或者你可以闭上你的眼睛,假装你可以拼凑在一起做你想象的你需要做的事情(大多数情况下你会发现在实践中这是不够的)。
由于这种对“程序操纵服务”的普遍需求,我们的C++前端托管在DMS之上。
拥有C++前端的DMS已被用于构建各种标准软件工程工具(测试覆盖率,分析器)以及对代码进行大规模更改(网站上有关于如何使用DMS的论文大规模重新架构的飞机任务软件)。
编辑7/8/2014:我们的前端现在可以处理完整的C++ 11和部分C++ 14,包括函数/过程/方法的控制和数据流。
- 1. 如何解析C头文件?
- 2. C++头文件解析
- 3. C#中的头文件解析器?
- 4. C,解析一些http头文件
- 5. 如何解析此头文件?
- 6. FOSRestBundle解析头文件
- 7. 如何从c#中的zip或复合文件解析信息?
- 8. 如何解析c#中的txt文件
- 9. 如何解析C#中的JSON子集合
- 10. C#解析JSON到泛型集合
- 11. 如何在JQuery中解析集合
- 12. 解析C文件
- 13. 解析C头文件以生成文件
- 14. 如何使用C#解析EPS文件?
- 15. 如何使用C#解析SQL文件?
- 16. 如何解析文件来阻止C++
- 17. C#中的文件解析#
- 18. 解析C++中的文件
- 19. PHP中未解析的头文件
- 20. 用PHP解析fsockopen的HTTP头文件?
- 21. 解析C文件中的XML文件而无需解析库
- 22. 最简洁的方式来解析头文件C的文本文件#
- 23. 解析c文件中的.conf文件
- 24. 骨干JS集合解析
- 25. Htmlnode集合和解析
- 26. Gson:解析泛型集合
- 27. ios json解析子集合
- 28. 解析动态集合
- 29. 解析C头文件,以确定所有的宏定义
- 30. 混合C/C++头文件可以包含另一个混合头文件吗?