C++ 文件解析器和函数提取器
C++ file parser and function extractor
我需要开发一个 Qt/C++ 软件,它可以读取 C++ 源文件,找到依赖项,并只将依赖文件中使用的代码复制到同名文件中。
举个例子。 main.cpp 调用 foo()。 foo() 在 foofuncs.h 中声明并在 foofuncs.cpp 中定义。 foofuncs 有许多不同于 foo() 的函数。我需要将 foo() 声明从 foofuncs.h 复制到一个新文件(例如 foofuncs.h.copy),该文件只有 foo() 声明(和相关包含)。同样,我会对 foofuncs.cpp.copy 做同样的事情,它只包含 foo() 定义(以及 #include "foo.h" 等)。这可能需要某种递归过程来遍历所有包含等。
所以我的问题是我该怎么做?我可以使用 QRegularExpressions 来查找代码块吗?如果是这样,我需要帮助。另外,是否有任何相关的开源工具可以集成到我的 Qt 应用程序中来帮助我解决这个问题?谢谢
您不能使用正则表达式解析 C++ 代码。
一些方向:
- 使用 clang 解析代码,然后使用 clang 的 API 创建代码
- 搜索
compiler-compiler
。
- 我发现这个 C++ 解析器库可以用来代替 clang,您可以查看它:https://github.com/foonathan/cppast
- 您还可以查看 https://www.antlr.org/
甚至不要尝试自己解析 C++ 代码,这是一个永无止境的故事。
我需要开发一个 Qt/C++ 软件,它可以读取 C++ 源文件,找到依赖项,并只将依赖文件中使用的代码复制到同名文件中。
举个例子。 main.cpp 调用 foo()。 foo() 在 foofuncs.h 中声明并在 foofuncs.cpp 中定义。 foofuncs 有许多不同于 foo() 的函数。我需要将 foo() 声明从 foofuncs.h 复制到一个新文件(例如 foofuncs.h.copy),该文件只有 foo() 声明(和相关包含)。同样,我会对 foofuncs.cpp.copy 做同样的事情,它只包含 foo() 定义(以及 #include "foo.h" 等)。这可能需要某种递归过程来遍历所有包含等。
所以我的问题是我该怎么做?我可以使用 QRegularExpressions 来查找代码块吗?如果是这样,我需要帮助。另外,是否有任何相关的开源工具可以集成到我的 Qt 应用程序中来帮助我解决这个问题?谢谢
您不能使用正则表达式解析 C++ 代码。
一些方向:
- 使用 clang 解析代码,然后使用 clang 的 API 创建代码
- 搜索
compiler-compiler
。 - 我发现这个 C++ 解析器库可以用来代替 clang,您可以查看它:https://github.com/foonathan/cppast
- 您还可以查看 https://www.antlr.org/
甚至不要尝试自己解析 C++ 代码,这是一个永无止境的故事。