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

时间:2010-08-08 14:18:17

标签: c perl

我正在寻找一个C代码的声明,给出文件名和亚麻在哪里开始。

我当然不能接受这条线,因为我可能会有这样的话:

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

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

那里有什么东西,大概是CPAN,它会自动执行此操作吗?

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

1 个答案:

答案 0 :(得分:5)

要做得非常好,你需要在Perl中使用完整的C语法分析器。但是,您可以使用更简单的算法覆盖99%以上的所有案例:

  1. 打开文件
  2. 在您到达有问题的行之前略过行
  3. 直到你到达行尾的分号为止
  4. “行尾的分号”对于“语句结束”来说是一个相当不错的启发式算法。相对简单的引用解析可能会保护您免受上述情况的影响。

    如果您需要更复杂的内容,可以查看C::Scan及其子类,或Inline::C::ParseRecDescent