我希望提取一条 C 代码语句,并给出其开始处的文件名和行号。
当然,我不能直接接电话,因为我可以这样:
foo(i,
j, "this is ); \
", k);
如示例所示,我也无法查找下一个 );
,这将使事情变得相当简单。
有没有什么东西(大概是在 CPAN 上)可以自动执行此操作?
如果我可以先通过缩进运行代码,我会让它允许无限的行长度,然后只取该行,但如果我这样做,我会丢失行号!
最佳答案
为了完美地做到这一点,您需要一个成熟的 Perl 中的 C 解析器。但是,您可以使用更简单的算法覆盖可能超过 99% 的情况:
- 打开文件
- 跳过几行,直到到达相关行
- 读行,直到行尾出现分号
“行尾的分号”对于“语句结束”来说是一个相当不错的启发式。相对简单的引号解析可能会保护您免受上述情况的影响。
如果您需要比这更复杂的东西,您可以查看 C::Scan及其子类,或 Inline::C::ParseRecDescent .
关于c - 使用perl根据文件名+行号提取一行C代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3434639/