c - 使用perl根据文件名+行号提取一行C代码

标签 c perl

我希望提取一条 C 代码语句,并给出其开始处的文件名和行号。

当然,我不能直接接电话,因为我可以这样:

foo(i,
   j, "this is ); \
   ", k);

如示例所示,我也无法查找下一个 );,这将使事情变得相当简单。

有没有什么东西(大概是在 CPAN 上)可以自动执行此操作?

如果我可以先通过缩进运行代码,我会让它允许无限的行长度,然后只取该行,但如果我这样做,我会丢失行号!

最佳答案

为了完美地做到这一点,您需要一个成熟的 Perl 中的 C 解析器。但是,您可以使用更简单的算法覆盖可能超过 99% 的情况:

  1. 打开文件
  2. 跳过几行,直到到达相关行
  3. 读行,直到行尾出现分号

“行尾的分号”对于“语句结束”来说是一个相当不错的启发式。相对简单的引号解析可能会保护您免受上述情况的影响。

如果您需要比这更复杂的东西,您可以查看 C::Scan及其子类,或 Inline::C::ParseRecDescent .

关于c - 使用perl根据文件名+行号提取一行C代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3434639/

相关文章:

c - 什么时候 const 被认为是真正的 const?

CC 编译没有得到我在代码中所做的更改

perl - 如何使用 Class::ArrayObjects?

regex - 如何使用 Perl 正则表达式突出显示连续重复的单词?

perl - 哪些 Perl 模块适合编写 RESTful Web API 客户端?

linux - Perl system()、exec() 和与 LSF 的交互

C: SEGFAULT with realloc on char **

c - 如何在C中忽略信号?

c - 从 C 代码创建函数的快速方法

perl - 为什么 Scalar::Util::Numeric 安装不正确?