我想构建一个解析并列出头文件内容的程序。到目前为止,这么好,我发现它很容易解析和列出我编写的头文件,但是当我开始解析跨平台API头时,事情变得混乱。解析不规则的C++原型
我目前的做法是相当简单的,这里是解析以下功能的伪代码示例:
void foo(int a);
void is a type, so we are dealing with instancing a type
foo is the name of that type
foo is followed by brackets, meaning it is a function of type void named foo
int is a type...
a is the name of that type instance
foo is a function of type void that takes one parameter of type int named a
然而,当我进入更大和更复杂的头,我偶然发现有些不规则的原型,包括宏和上帝知道什么。举例:
GLAPI void APIENTRY glEvalCoord1d(GLdouble u);
GLAPI和APIENTRY是平台相关的宏。我的简单解析方案会破坏哪种类型,因为它期望对象的名称遵循其类型。这两个宏恰好转换为__stdcall,__declspec(dllimport)或extern,但理论上它们可能意味着什么,在编译之前它们的含义不清楚。
如何编写我的解析器,以便它可以处理这种情况,而不会感到困惑?宏本身是在早期阶段定义的,所以解析器可以意识到GLAPI和APIENTRY是宏,因此它们可以简单地被忽略,这是要走的路吗?自然地,这只是众多不规则之处的变体之一,解析器可能偶然发现通过不同的头文件进行解析,所以任何有关如何处理任何“合法”头文件内容解析的通用技术都是受欢迎的。
不,我不需要任何建议。干杯,但。 –
我很抱歉,有一个感叹号“需要建议!”但由于某种原因,该网站将其更改为?甚至在我编辑我的帖子后,它仍然把一个问号...奇怪,但我假设,因为我发布了一个问题,问号是默认的...让我猜,你试图编辑它,并失败了? ? :) – dtech
哈,你是对的..它确实似乎重写了尾随感叹号。 –