1

我需要解析一个 C++ 类文件 (.h) 并提取以下信息:

  1. 函数名称
  2. 返回类型
  3. 每个函数的参数类型列表

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

例如。

#include <someHeader>  

class Test
{
    public:
    Test();

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

};

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

我在这里阅读了基本语法,但发现它太复杂而无法理解。

Q1。我无法弄清楚这项任务有多复杂。有人可以为函数声明提供更简单的语法来执行此解析吗?

Q2。我的方法是正确的还是我应该考虑使用一些库而不是重新发明?


编辑:澄清一下,我没有解析问题,问题更多是理解我需要解析的语法。

4

3 回答 3

1

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

如果您可以对头文件做出某些假设,您的任务就会变得更容易。例如,如果你的函数前面总是有一个 EXPOSE-tag 并且函数总是在一行上,你可以先 grep 这些行:

grep -A1 EXPOSE <files>

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

不过,我建议使用现有工具。这似乎是一个关于如何使用 clang 和 Python 的教程。

于 2012-08-17T11:02:19.790 回答
0

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

仅当您精通(或类似学习)用于检查 AST 的 XML 分析器时,才应考虑使用。这是一个相当复杂的结构...

无论如何,您都需要“grep”用于标识所需片段的注释,因为注释在输出 XML 中丢失。

于 2012-08-17T11:20:33.137 回答
0

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

无论哪种方式,它都可以为您提供一些有关如何执行此操作的指示。

于 2012-08-17T11:26:05.953 回答