如何从C99函数声明中确定返回类型,参数,函数名称

时间:2013-02-22 00:02:50

标签: c perl c99

我正在寻找最简单的方法,如何从C99下编写的c头文件中确定返回类型,参数和函数名称。

这是我的学校项目,必须用Perl编写,没有任何库。所以我有几个选项,我可以使用正则表达式,但它不适用于最难的功能,如下:

int * (* func(int * arg[]))();

返回类型应为“ int *(*)()”,参数为“ int * [] ”。

第二种方法是使用语法并解析它,但我认为,这不是正确的方法。

我的好友告诉我一个可以做到的现有算法。但他不记得名字,或他在哪里看到他。算法很简单。类似于:查找第一个结束括号,此结束括号与第一个匹配前一个开始括号之间的所有内容都是参数...

有没有人知道我在寻找什么?

3 个答案:

答案 0 :(得分:2)

如果你能通过Kernighan和Ritchie获得The C Programming Language。它不仅是C语言,而且在第5章中它们提供了解析C声明的代码。你可以在那里看看他们是如何做到的,并且很可能适应他们的方法(第5章,第12节)。

答案 1 :(得分:2)

答案 2 :(得分:0)

您只需为此类问题构建parser即可。通常,自上而下的方法(例如recursive descent)会为这种工作做到这一点。幸运的是,自上而下的解析器或多或少都可以直接实现。

C语言中唯一的硬语是,这些语言通常至少是LL1(1个令牌向前看)或更差的LL2或更高。因此,有时你必须提前查看一些令牌,以确定它是函数声明还是函数调用。