制作解析器以提取函数名称、参数、返回类型

Making a parser to extract function name, parameters, return type

本文关键字:参数 返回类型 函数 提取      更新时间:2023-10-16

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

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

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

例如。

#include <someHeader>  
class Test
{
    public:
    Test();
    void fun1();
    // *Expose* //
    void fun2();  
};

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

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

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

问题 2.我的方法是否正确,还是我应该考虑使用一些库而不是重新发明?


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

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

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

grep -A1 EXPOSE <files>

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

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

GCC XML是一个发出AST(抽象语法树)的开源工具。请参阅我发布有关我对它的用法的另一个答案。

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

无论如何,您都需要"grep"来识别所需代码段的注释,因为注释在输出 XML 中丢失。

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

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