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

Mik*_*age 2 c perl

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

当然,我不能只是采取行,因为我可以有类似的东西:

foo(i,
   j, "this is ); \
   ", k);
Run Code Online (Sandbox Code Playgroud)

如例子所示,我也不能寻找下);一个,这将使它相当简单.

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

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

JSB*_*ոգչ 5

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

  1. 打开文件
  2. 在您到达相关行之前跳过线条
  3. Slurp行直到你到达行尾的分号

"行尾的分号"对于"语句结束"来说是一个相当不错的启发式方法.相对简单的引用解析可能会保护您免受上面显示的情况的影响.

如果你需要更复杂的东西,你可能会看看C :: Scan及其子类,或者Inline :: C :: ParseRecDescent.