制作解析器以提取函数名称、参数、返回类型
Making a parser to extract function name, parameters, return type
我需要解析一个C++类文件(.h)并提取以下信息:
- 函数名称
- 返回类型
- 每个函数的参数类型列表
假设有一个特殊的标签,我可以使用它来识别我是否需要解析函数。
例如。
#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可能是一个不错的选择。
无论哪种方式,它都可能会为您提供有关如何执行此操作的一些指示。
相关文章:
- 函数作为模板参数,是否对返回类型强制约束
- 在 c++ 中将函数返回类型指定为模板参数
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 基于类型作为参数的字符串表示形式具有不同返回类型的函数
- 具有"templated"返回类型和参数的函数指针
- 如何创建两个具有相同名称和不同返回类型并基于布尔参数运行的函数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 有没有办法根据 lambda 参数返回类型部分专用化我的模板化函数?
- 如何定义依赖于参数包转换的函数的返回类型
- 无法推断返回类型的模板参数
- C++模板;作为模板参数传递的函数的自动推导返回类型
- 如何在模板参数中分离函数类型返回类型和参数
- 如何修复用于根据参数返回不同类型的模板类中的错误C2679?
- 为什么函数返回类型中不允许参数推导?
- 模板化函数以从输入参数推断返回类型 stl-container
- 将 2D 数组作为函数参数,并返回 2D 数组作为函数的返回类型
- 推论成员函数参数 /返回类型
- C++ 基于模板参数返回类型的模板函数
- 根据参数返回类型
- 隐藏规则-参数/返回类型必须相同吗?