У меня есть несколько разумных (не запутанных) исходных файлов Perl, и мне нужен токенизатор, который разделит его на токены и вернет тип токена каждого из них, например, для скрипта
print "Hello, World!\n";
он вернет что-то вроде этого:
Какая библиотека лучше всего (желательно написана на Perl) для этого? Он должен быть достаточно правильным, то есть он должен уметь анализировать синтаксические конструкции, такие как qq {{\}}}
, но он не должен знать о специальных синтаксических анализаторах, таких как Lingua :: Romana :: Perligata . Я знаю, что синтаксический анализ Perl завершен по Тьюрингу, и только сам Perl может сделать это правильно, но мне не нужна абсолютная корректность: токенизатор может дать сбой, быть несовместимым или принять некоторые значения по умолчанию в некоторых очень редких случаях, но он должен работать правильно большую часть времени. Это должно быть лучше, чем подсветка синтаксиса, встроенная в обычный текстовый редактор.
К вашему сведению, я попробовал PerlLexer в pygments , который работает разумно для большинства конструкций, за исключением того, что он не может найти 2-й вывод Ключевое слово
в этом:
print length(<<"END"); print "\n";
String
END
использовать PPI;
Да, только Perl может анализировать Perl, однако PPI является 95% правильным решением.