2010-08-19 49 views
7

我有一些合理的(未混淆的)Perl源文件,並且我需要一個標記器,它將它分割爲標記,並返回它們每一個的標記類型,例如,爲腳本如何標記Perl源代碼?

print "Hello, World!\n"; 

它將返回是這樣的:

  • 關鍵字5個字節
  • 空白1個字節
  • 雙引號串17個字節
  • 分號1字節
  • 空白1字節

這是最好的庫(最好用Perl編寫)嗎?它必須是合理正確的,即它應該能夠解析像qq{{\}}}這樣的句法結構,但它不必知道像Lingua::Romana::Perligata這樣的特殊解析器。我知道,解析Perl是圖靈完成的,只有Perl本身可以做到這一點,但我不需要絕對正確:標記器可能會失敗或不兼容,或者在一些非常罕見的角落案例中假設一些默認值,但它應該工作正確的大部分時間。它必須比內置在普通文本編輯器中的語法高亮更好。

FYI我試過PerlLexer在pygments,這對於大多數結構,工作原理合理但它無法找到在這一個第二print關鍵字:

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

回答

7

use PPI;

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

+0

+1有趣的回答 – Dacav 2011-12-19 10:49:43