【发布时间】:2012-02-07 10:36:37
【问题描述】:
所以我需要能够解析一些带有注释的相对简单的 C++ 文件,并从中生成额外的源文件。
例如,我可能有这样的事情:
//@ service
struct MyService
{
int getVal() const;
};
我需要找到 //@ 服务注解,并获得它后面结构的描述。
我正在考虑可能利用 LLVM/Clang,因为它似乎支持在第三方应用程序中嵌入编译器/解析功能的库。但就解析源代码而言,我真的很无知,所以我不确定我到底需要寻找什么,或者从哪里开始。
我了解 AST 是语言表示的核心,并且库支持从 Clang 中的源文件生成 AST。但是 cmets 不会真正成为 AST 的一部分,对吧?那么,找到遵循特定注释注释的结构表示的好方法是什么?
我不太担心注释会出现在不适当的位置的情况,因为它只会用于解析专门为此应用程序编写的 C++ 文件。但当然,我能做得越健壮越好。
【问题讨论】:
-
您是否只处理一个子集,其中遵循注释的唯一合法事物是具有简单成员的
struct?因为你在解析 C++,所以它很快就会变得非常复杂。 -
修改文档生成器是最简单的。
-
@Dervall 最初,是的。一旦达到这一点,我可能会考虑更进一步,但最初的要求是针对具有简单成员的简单结构。我永远不需要处理模板、虚函数或重载运算符。
-
你需要解析结构/类的内容,还是只是找出它的名字?您是否设置了注释,或者基于预处理器的注释是否可以替代?
-
@Jan Hudec 我需要解析结构的接口,尽管我不需要解析结构成员函数中的任何代码。我现在什么都没有。您所说的基于预处理器的注释是什么意思?