2012-08-17 58 views
1

我需要解析C++类文件(.h)中,并提取以下信息:使解析器提取函数名,参数,返回类型

  1. 函数名
  2. 返回类型
  3. 名单各功能的参数类型

假设有一个特殊的标签,我可以识别是否需要解析一个函数。

例如,

#include <someHeader> 

class Test 
{ 
    public: 
    Test(); 

    void fun1(); 
    // *Expose* // 
    void fun2(); 

}; 

所以我只需要解析fun2()。

我读的基本语法here,但发现它太复杂,理解。

Q1。我无法弄清楚这个任务有多复杂。有人可以提供一个简单语法的函数声明来执行此解析? Q2302。我的方法是对的还是应该考虑使用一些库而不是重新创建?


编辑:只是为了澄清,我没有问题的解析,问题就更加理解我需要解析的语法。

+0

但是你为什么要解析一个C++头文件? – 2012-08-17 10:44:15

+0

如果你不必这样做(例如作业),不要重新实现,而是使用一个库/另一​​个工具来做到这一点。 C++是可笑的难以解析。 – evnu 2012-08-17 10:57:19

+0

[这个问题可能会帮助你](http://stackoverflow.com/q/526797/237483) – 2012-08-17 11:15:24

回答

1

C++头文件可能包含任意C++代码。因此,解析头文件可能与解析各种C++代码一样困难。

如果您可以对头文件进行某些假设,那么您的任务将变得更加简单。举例来说,如果你总是有获得破甲标签在你的函数的正面和功能都在同一行,你可以先用grep这些线路:

grep -A1 EXPOSE <files> 

然后你可以应用正则表达式过滤掉你需要的信息。

不过,我建议使用现有的工具。 This seems to be a tutorial关于如何用clang和Python做到这一点。

+0

这正是我所做的。我没有使用C++自己解析它的问题,问题是我发现语法本身难以理解,因此实际上需要考虑解析所需的逻辑。 – 2012-08-17 11:18:59

0

GCC XML是一个开放源码的工具,发射AST(抽象语法树)。请参阅this其他答案,我发布了有关使用它的用法。

你应该考虑到,如果你是精通(或类似于学习)与XML分析器只用于检查AST。这是一个相当复杂的结构......

你无论如何都将需要识别您所需的片断的意见“的grep”,作为注释在输出XML丢失。

0

,如果你是这样做只是为了文档doxygen可能是一个不错的选择。

无论哪种方式,它可能会给你一些指导如何做到这一点。