Есть ли программные инструменты для Perl к преобразованию Python? [закрытый]

json - simplejson, добавлено в stdlib. Но так как json был добавлен в 2.6, simplejson имеет преимущество работы с большим количеством версий Python (2.4+).

simplejson также обновляется чаще, чем Python, поэтому, если вам нужна (или вы хотите) последняя версия, лучше по возможности использовать сам simplejson, если это возможно.

Хорошей практикой, на мой взгляд, является использование одного или другого в качестве запасного варианта.

try:
    import simplejson as json
except ImportError:
    import json

18
задан brian d foy 30 June 2009 в 21:00
поделиться

6 ответов

Джеймс,

Я рекомендую вам просто перепишите модуль на Python по нескольким причинам:

  1. Парсинг Perl ЧЕРТОВ ТРУДНО. Если это не является для вас важным и желательным упражнением, вы обнаружите, что тратите гораздо больше времени на перевод, чем на полезную работу.
  2. Переписав его, вы получите отличный шанс попрактиковаться. Python. Обучение лучше всего проводить в процессе, и наличие действительно нужной вам задачи - большое благо.
  3. Наконец, у Python и Perl совершенно разные философии. Чтобы получить больше API Pythonic, лучше просто переписать его на Python.
33
ответ дан 21 October 2019 в 04:17
поделиться

Начиная с 5.10, вы можете скомпилировать perl с включенным экспериментальным оформлением различных атрибутов и установить в переменной среды PERL_XMLDUMP имя файла, чтобы получить дамп XML дерева синтаксического анализа ( включая комментарии - очень полезно для языковых переводчиков). Хотя, как сказано в документе, эта работа еще не завершена.

7
ответ дан 21 October 2019 в 04:17
поделиться

Я думаю, вам следует переписать свой код. Качество результатов синтаксического анализа зависит от вашего стиля программирования на Perl. Я думаю, что приведенная ниже цитата очень хорошо подводит итог теоретической стороне дела. Из Википедии: Perl в Википедии

Perl имеет полную по Тьюрингу грамматику, потому что на синтаксический анализ может повлиять код времени выполнения, выполняемый на этапе компиляции. [25] Следовательно, Perl не может быть проанализирован простой комбинацией лексера / парсера Lex / Yacc. Вместо этого интерпретатор реализует свой собственный лексер, который координируется с модифицированным синтаксическим анализатором GNU bison для устранения неоднозначности в языке.

Часто говорят, что «только perl может анализировать Perl», что означает, что только интерпретатор Perl (perl) может проанализировать язык Perl (Perl), но даже это, в общем, неверно. Поскольку интерпретатор Perl может моделировать машину Тьюринга на этапе компиляции, ему нужно будет решить проблему остановки, чтобы завершить синтаксический анализ в каждом случае. Это давний результат, что проблема остановки неразрешима, и поэтому даже Perl не всегда может разобрать Perl. Perl делает необычный выбор, предоставляя пользователю доступ ко всем его возможностям программирования на собственном этапе компиляции. Стоимость с точки зрения теоретической чистоты высока, но практические неудобства кажутся редкими.

Другие программы, которые берутся анализировать Perl, такие как анализаторы исходного кода и автоинденторы, должны бороться не только с неоднозначными синтаксическими конструкциями, но и также с неразрешимостью парсинга Perl в общем случае. Проект PPI ​​Адама Кеннеди был сосредоточен на синтаксическом анализе кода Perl как документа (с сохранением его целостности как документа), а не на синтаксическом анализе Perl как исполняемого кода (что не всегда может сделать даже сам Perl). Кеннеди первым высказал предположение, что «синтаксический анализ Perl страдает« проблемой остановки »[26], и это позже было доказано. [27]

18
ответ дан 21 October 2019 в 04:17
поделиться

I never tried it and it seems unmaintained, but maybe PyPerl is an option?

How big is this API? If it really this useful then why don't you rewrite it in python. Writing an automatic converter will probably take longer then rewriting the API.

And even if you manage to automatically rewrite it, the resulting code probably won't be very pythonic anyway.

Be sure to check out the answers by weismat and eliben

6
ответ дан 21 October 2019 в 04:17
поделиться

Как бы интересно ни было преобразовать его в Python или переписать на Python, я бы не стал делать ни одного из это мой первый выбор. Тогда вы застрянете с разветвленной базой кода. Любые изменения, которые вы вносите, должны быть продублированы.

Напишите какую-нибудь оболочку для вашего API, к которой вы можете получить доступ извне Perl. Одна из возможностей - интерфейс RESTful. Другой вариант, если вы не хотите иметь дело с сетевыми проблемами, - это создать набор инструментов командной строки, которые обращаются к API (возможно, передавая информацию как JSON). Затем вы можете написать простую библиотеку python, которая обращается к API-оболочке с помощью httplib2 или подпроцесса (в зависимости от того, как вы

4
ответ дан 21 October 2019 в 04:17
поделиться

Вы можете попробовать написать синтаксический анализатор с PPI , сбросить его в какую-то промежуточную форму и оттуда механически написать Python. Трудно, но выполнимо. Полезно? Э ...

Или вы можете перенести свой код на Perl 6 , подождите, пока Pynie будет достаточно готов, чтобы разрешить прямой вызов с Python на Perl6 в той же среде выполнения! В конце концов, это не так уж и далеко. Жаль, что Пони мертв.

3
ответ дан 21 October 2019 в 04:17
поделиться
Другие вопросы по тегам:

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