如何标记Perl源代码?

时间:2010-08-19 09:08:15

标签: perl tokenize

我有一些合理的(没有混淆的)Perl源文件,我需要一个tokenizer,它会将它拆分为令牌,并返回每个令牌的令牌类型,例如:对于剧本

print "Hello, World!\n";

会返回这样的内容:

  • keyword 5 bytes
  • whitespace 1 byte
  • double-quoted-string 17 bytes
  • 分号1个字节
  • whitespace 1 byte

哪个是最好的库(最好用Perl编写)呢?它必须是合理正确的,即它应该能够解析像qq{{\}}}这样的语法结构,但它不必知道像Lingua::Romana::Perligata这样的特殊解析器。我知道解析Perl是Turing-complete,并且只有Perl本身才能正确完成,但我不需要绝对正确:令牌化程序可能会失败或不兼容或在某些非常罕见的极端情况下假设某些默认值,但它应该工作大部分时间都是正确的。它必须优于内置于普通文本编辑器中的语法高亮。

仅供参考我在pygments中尝试了PerlLexer,它对大多数构造都有效,除了它在这一个中找不到第二个print关键字:

print length(<<"END"); print "\n";
String
END

2 个答案:

答案 0 :(得分:23)

PPI

答案 1 :(得分:7)

use PPI;

是的,只有perl可以解析Perl,但PPI是95%正确的解决方案。