1

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

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

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

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

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

我的朋友告诉我一个现有的算法可以做到这一点。但他不记得名字,也不记得在哪里见过他。该算法非常简单。类似的东西:找到第一个结束括号,这个结束括号和第一个匹配的前一个开始括号之间的所有内容都是参数......

有谁知道我在找什么?

4

3 回答 3

2

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

于 2013-02-22T00:45:28.323 回答
2

查看C 声明的魔术解码器环

于 2013-02-22T01:31:36.750 回答
0

您只需为此类问题构建一个解析器。通常自上而下的方法(例如递归下降)可以完成这种工作。幸运的是,自上而下的解析器或多或少可以直接实现。

类似 C 的语言中唯一的难点是,这些语言通常至少为 LL1(1 个标记向前看)或更差的 LL2 或更高。因此,有时您必须提前查看一些标记,以了解它是函数声明还是函数调用。

于 2013-02-22T00:14:19.353 回答