2015-03-03 108 views
1

我需要解析头文件。 我的目标是从头文件中搜索特定的结构,并提取结构变量的值和偏移量。C++头文件解析

任何人都可以通过省略注释以及如何从头解析宏来提示解析头文件的最佳方法吗?

+0

http://clang.llvm.org/doxygen/group__CINDEX.html – deviantfan 2015-03-03 06:46:20

+0

@deviantfan您可以请解释如何使用该API。因为我需要解析包含超过100个结构的完整头文件并找到我需要的结构。然后我需要读取结构变量及其偏移量以将其存储在内存中。 – IPS 2015-03-03 06:51:47

+1

@HariPrabhakaran:不要指望处理C++复杂性的设备的API“简单”。您将不得不支付学习如何使用C++解析引擎的费用,并且还需要花费您在代码中学习C++黑暗角落的代价,以及API如何处理这种类型的东西。 – 2015-03-03 06:56:18

回答

3

解析C++很困难。您可能想要使用现有的解析器。我知道的4那可能是有用的:

  • 爱迪生设计集团前端
  • 锵的C++解析器
  • DMS软件再造工具包和C++ 14的前端
  • GCC(通过熔融)

其中大多数不会“解析”宏;他们想要扩展他们使用预处理器。所以宏和PP条件从解析树中消失。 DMS可以进行“有限”的预处理,并收集/保留在结构良好的地方以及它们常见的各种地方发现的预处理器指令和宏。

解析头文件是真的艰难;他们往往会加载来自许多以前版本软件的条件和垃圾,以及来自特定供应商的成语。 (MS的标题中有一些惊人的怪异东西)。除非你正在讨论解析你的头文件,否则确保你检查你选择的工具可以处理你实际处理的C++方言。

+0

感谢您的信息。但我的问题是,我需要在运行时读取头文件的内容。在运行时,我需要解析头文件中的结构并存储在内存中。你能提出建议吗? – IPS 2015-03-03 07:21:20

+0

在运行时?然后,您需要找出一种方法,在应用程序启动后将这些小狗加载到您的应用程序空间中(我敢打赌这真的很尴尬),将您的应用程序*移植到这些(更可能)的*中,或者调用其中的一个作为一个需求子进程。你试图完成什么,需要在运行时读取这些数据? – 2015-03-03 11:25:05