【问题标题】:How to determine return type, arguments, function name from C99 function declarations如何从 C99 函数声明中确定返回类型、参数、函数名
【发布时间】:2013-02-22 00:02:50
【问题描述】:

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

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

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

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

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

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

有人知道我在找什么吗?

【问题讨论】:

  • 这是一个解析问题。为什么你觉得解析不是正确的做法?
  • @JonPrudy:这个头解析器的基本部分可以用正则表达式写得到10/10分。进阶部分可获得1分奖励。所以我认为我不必编写复杂的解析器来获得 1 分。但我可能是错的:D Cong Xu 感谢我正在寻找的算法,但正如我所见,这并不是我所需要的。

标签: c perl c99


【解决方案1】:

【讨论】:

  • 我正在寻找不了解 BNF 或其他语法规则的简单算法,所以这似乎是正确的方法。现在,谢谢。
  • @l0v3,如果这是“正确答案”,请务必选择它。谢谢!
  • 对不起,我是新手,所以我会在标记为正确之前尝试解决方案:)
  • @l0v3,当然,但如果您质疑彼得·范德林登的著作,他将困扰您的梦想。顺便说一句,如果你是 C 新手并想成为专家,我强烈推荐这本书,它将改变你的生活。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2018-10-12
      • 1970-01-01
      • 2014-12-08
      相关资源
      最近更新 更多