2010-08-19 15 views
7

Mam kilka rozsądnych (nie zamaskowanych) plików źródłowych Perla i potrzebuję tokenizera, który podzieli go na tokeny i zwróci typ tokena każdego z nich, np. za scenariuszJak tokenizować kod źródłowy Perla?

print "Hello, World!\n"; 

byłoby powrócić coś takiego:

  • kluczowego 5 bajtów
  • spacje 1 bajt
  • podwójnie cytowany-ciąg 17 bajtów
  • średnik 1 bajt
  • biały 1-bajtowy

Która biblioteka jest najlepsza (najlepiej napisana w języku Perl)? Musi to być poprawne, tzn. Powinno być w stanie analizować konstrukcje syntaktyczne, takie jak qq{{\}}}, ale nie musi wiedzieć o specjalnych analizatorach składniowych, takich jak Lingua::Romana::Perligata. Wiem, że przetwarzanie Perla to Turing-complete, i tylko Perl może to zrobić dobrze, ale nie potrzebuję absolutnej poprawności: tokenizer może zawieść lub być niekompatybilny lub przyjąć pewne domyślne w rzadkich przypadkach narożnych, ale powinien działać właściwie przez większość czasu. Musi być lepszy niż podświetlanie składni wbudowane w średni edytor tekstu.

FYI Próbowałem PerlLexer w pygments, który działa rozsądna dla większości konstrukcji, poza tym, że nie można znaleźć 2nd print słowa kluczowego w tej jednej:

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

Odpowiedz

7

use PPI;

Tak , tylko Perl może parsować Perl, jednak PPI jest w 95% poprawnym rozwiązaniem.

+0

+1 zabawna odpowiedź – Dacav