我希望提取一条C代码语句,给定其开头的文件名和行号。
当然,我不能只接受这一行,因为我可以这样做:
foo(i,
j, "this is ); \
", k);正如示例所示,我也找不到下一个);,这将使它变得相当简单。
有没有什么东西,大概在CPAN上,会自动完成这项工作?
如果我可以先通过缩进运行代码,我会让它允许无限的行长,然后只取这一行,但如果我这样做,我就会丢失行号!
发布于 2010-08-08 22:25:40
要很好地做到这一点,您需要在Perl中使用一个成熟的C解析器。但是,您可以使用一个简单得多的算法覆盖所有情况的99%以上:
“行尾的分号”是一个相当不错的启发式“语句结尾”。相对简单的引号解析可能会保护您免受上述情况的影响。
如果你需要更复杂的东西,你可以看看C::Scan及其子类,或者Inline::C::ParseRecDescent。
https://stackoverflow.com/questions/3434639
复制相似问题