【发布时间】:2014-10-06 03:59:49
【问题描述】:
我正在编写一个实用程序,它应该解析 C++(和 C)头文件,提取结构、枚举、字段等,并根据提取的信息生成其他语言的代码。我决定为此使用 libclang。
我正在使用RecursiveASTVisitor,似乎我能够提取我需要的所有信息,除了 cmets。
我希望读取出现在每个声明(字段、结构、类、枚举)正上方的注释,并在生成其他语言的代码时添加其文本。
问题是我看到的所有使用 cmets 的示例都使用CxCursor 和clang 的C 接口,我不知道如何在我的上下文中获取CxCursor。
那么 - 我如何在仍然使用 RecursiveASTVisitor 的同时提取 cmets?
【问题讨论】:
-
你可以研究一下clang-fmt的源码...
-
你的意思是你在写另一个 Doxygen? ;) [Yad, Yet another Doxygen - 或者“Yet Other Doxygen Again”, Yoda]
-
也许 Bison/Flex 是编写标记器/解析器的更好起点?
-
@MatsPetersson - 我不想要单独的文档。我想在生成的代码中嵌入每个字段/结构的相关注释(这将是其他语言 - C#、Lua 等)
-
@Tanuki - 我真的不知道这些,但是从一些谷歌搜索来看,它们似乎不是特定于 c++ 解析的,并且没有使用它们的规范 c++ 解析器实现。 libclang 的最大优势在于它实际上编译 代码,因此我得到了例如结构/字段/枚举的字节大小,甚至当我使用位域时的位大小。我没有提到目的是为了能够通过网络发送和接收这些数据结构,所以简单的解析在这里无济于事。