Как токенизировать исходный код Perl?

У меня есть несколько разумных (не запутанных) исходных файлов Perl, и мне нужен токенизатор, который разделит его на токены и вернет тип токена каждого из них, например, для скрипта

print "Hello, World!\n";

он вернет что-то вроде этого:

  • ключевое слово 5 байтов
  • пробел 1 байт
  • двойные кавычки - строка 17 байт
  • точка с запятой 1 байт
  • пробел 1 байт

Какая библиотека лучше всего (желательно написана на Perl) для этого? Он должен быть достаточно правильным, то есть он должен уметь анализировать синтаксические конструкции, такие как qq {{\}}} , но он не должен знать о специальных синтаксических анализаторах, таких как Lingua :: Romana :: Perligata . Я знаю, что синтаксический анализ Perl завершен по Тьюрингу, и только сам Perl может сделать это правильно, но мне не нужна абсолютная корректность: токенизатор может дать сбой, быть несовместимым или принять некоторые значения по умолчанию в некоторых очень редких случаях, но он должен работать правильно большую часть времени. Это должно быть лучше, чем подсветка синтаксиса, встроенная в обычный текстовый редактор.

К вашему сведению, я попробовал PerlLexer в pygments , который работает разумно для большинства конструкций, за исключением того, что он не может найти 2-й вывод Ключевое слово в этом:

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

7
задан pts 19 August 2010 в 09:29
поделиться

2 ответа

23
ответ дан 6 December 2019 в 06:02
поделиться

использовать PPI;

Да, только Perl может анализировать Perl, однако PPI является 95% правильным решением.

7
ответ дан 6 December 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: