代码之家  ›  专栏  ›  技术社区  ›  Mikeage

基于文件名+行号,使用Perl提取一行C代码

  •  2
  • Mikeage  · 技术社区  · 14 年前

    我正在寻找一个C代码的语句,它给出了文件名和行号。

    当然,我不能只是排队,因为我可能会有这样的事情:

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

    如示例所示,我也无法查找下一个 ); 两者都可以,这就相当简单了。

    有没有什么东西,大概是在CPAN上,这是自动完成的?

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

    1 回复  |  直到 14 年前
        1
  •  5
  •   JSBÕ±Õ¸Õ£Õ¹    14 年前

    要做到这一点,您需要一个完整的Perl C解析器。但是,您可以用一个更简单的算法覆盖99%以上的所有情况:

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

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

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