提取头文件中的函数列表 < >我正在寻找一种方法来提取C++头文件中的所有函数,包括对函数定义顶部的相应函数的注释。

提取头文件中的函数列表 < >我正在寻找一种方法来提取C++头文件中的所有函数,包括对函数定义顶部的相应函数的注释。,c++,parsing,header-files,C++,Parsing,Header Files,其思想是生成文件中所有函数的列表,以便将其放入CSV或Excel文件中。我希望在每一行上: 头文件名;仅限函数名;完整的功能签名;该函数代码中的注释 示例(来自文件someHeader.h): 变成 someHeader.h;DoSomething;void DoSomething (int CleverParameter);This is the multi-line comment for the DoSomething function. 我不需要聪明的解析和类型/依赖解析之类的东西。我

其思想是生成文件中所有函数的列表,以便将其放入CSV或Excel文件中。我希望在每一行上:

头文件名;仅限函数名;完整的功能签名;该函数代码中的注释

示例(来自文件someHeader.h):

变成

someHeader.h;DoSomething;void DoSomething (int CleverParameter);This is the multi-line comment for the DoSomething function.

我不需要聪明的解析和类型/依赖解析之类的东西。我手头有VisualStudio 2010和2012。也不怕Linux或Windows命令行工具。如果在这个过程中清理了空白,那就太好了。

编写一个象素的C++解析器不是一件容易的事。

一个可能的解决方案是使用文档生成器,例如,它不包括完整的C++解析器,但它应该足够用于您的目的:

  • 使用doxygen生成包含所有函数定义和注释的XML输出
  • 使用XSLT样式表或XML解析器生成CSV文件

这不是一个完美的解决方案,但它肯定比正则表达式方法更健壮,并且不需要太多的代码来让它工作。

如果你不需要准确的答案,那么正则表达式可以做得很好(例如,糟糕)。否则,您将发现要提取这样的函数定义,您需要一个完整的预处理器来解析宏和条件(也许您可以先通过预处理器运行头来解析它)。尽管如此,C++的语法还是很晦涩难懂(MS的变体更糟糕,因为它有30年的历史),所以无论你选择什么不聪明的解析解决方案,都会出现误报和误报。你说你不怕Linux。我不知道你将如何在Windows和Linux之间运行你的代码,但是如果你能很容易地在两者之间运行,并且不太在意的话,看看“lex”。我敢肯定你可以找到C/C++的预定义扫描仪。看看
ctags
-它可以为你完成大部分解析工作(尽管没有注释)。ctags看起来不错,让我半途而废。我在标记文件中没有得到注释(这没关系)。但我也没有得到使用其他文件中定义的类型的函数定义的标签。“不会很容易”是今年的轻描淡写。我们已经连续工作了大约5年。DoXEGEN是可行的,但不准确,因为它不是真正的C++解析器。它可能比正则表达式解决方案要好。doxygen方法非常接近。因为我现在没有足够的时间学习XML后处理,所以我将直接从HTML输出中复制内容。非常感谢!
someHeader.h;DoSomething;void DoSomething (int CleverParameter);This is the multi-line comment for the DoSomething function.