代码之家  ›  专栏  ›  技术社区  ›  James Thompson

有用于Perl到Python转换的编程工具吗?[闭门]

  •  17
  • James Thompson  · 技术社区  · 16 年前

    在我的新工作中,使用Python的人比使用Perl的人多,我自己编写了一个非常有用的API,我想让我的同事可以使用Python。

    bridgekeeper

    对于我来说,聘请一家咨询公司来翻译这个API几乎肯定不值得,但这是一个非常有趣的工具。

    有没有人知道一个编译器会解析(或尝试解析!)每L5代码并将其编译成Python?如果没有这样的东西,我应该如何开始编写一个简单的编译器来解析我的面向对象Perl代码并将其转换为Python?是否有ANTLR或YACC语法可以作为起点?

    编辑:我找到了 perl.y

    7 回复  |  直到 16 年前
        1
  •  36
  •   Eli Bendersky    16 年前

    詹姆斯,

    出于以下几个原因,我建议您用Python重写模块:

    1. 解析Perl非常困难。除非这对你来说是一项重要且可取的运动,否则你会发现自己在花钱
    2. 通过重写它,您将有机会练习Python。学习最好是通过实践来完成,而有一项你真正需要完成的任务是一个巨大的好处。
        2
  •  18
  •   Community CDub    5 年前

    我认为你应该重写你的代码。解析结果的质量取决于您的Perl编码风格。 我认为下面的引文很好地概括了理论方面。 Perl in Wikipedia

    Perl具有图灵完整语法,因为解析可能会受到编译阶段执行的运行时代码的影响。[25]因此,Perl不能由直接的Lex/Yacc lexer/parser组合进行解析。相反,解释器实现了自己的lexer,它与一个改进的gnubison解析器相协调,以解决语言中的歧义。

    其他负责解析Perl的程序,如源代码分析器和自动压头,不仅要处理含糊不清的语法结构,还要处理一般情况下Perl解析的不确定性。Adam Kennedy的PPI项目将重点放在将Perl代码解析为文档(保持其作为文档的完整性),而不是将Perl解析为可执行代码(即使Perl本身也不能总是这样)。肯尼迪首先猜测,“解析Perl会遇到‘停止问题’”[26],这一点后来得到了证实

        3
  •  7
  •   ysth    16 年前

    从5.10开始,您可以使用 Misc Attribute Decoration 启用并将PERL_XMLDUMP环境变量设置为文件名,以获取解析树的XML转储(包括注释-对语言转换器非常有用)。虽然正如医生所说,这是一项正在进行的工作。

        4
  •  6
  •   jitter    16 年前

    我从来没有试过,而且似乎没有保养,但也许 PyPerl 这是一种选择吗?

    而且,即使您成功地自动重写了它,最终的代码可能也不会是非常pythonic的。

    一定要查看魏斯马特和伊莱本的答案

        5
  •  4
  •   jcdyer Anand S Kumar    16 年前

    虽然将其转换为python或用python重写可能会很有趣,但我不会把这两种都作为我的第一选择。然后你会被一个分叉的代码库卡住。您所做的任何修改都必须复制。

    为您的API编写某种包装器,您可以从Perl外部访问它。一种可能是RESTful接口。如果不想处理网络问题,另一个方法是创建一组访问API的命令行工具(可能以JSON的形式传递信息)。然后,您可以编写一个简单的python库,该库使用httplib2或子流程访问包装器API(取决于您实现包装器的方式)。

    每当接口发生变化时,您仍然需要更新Python API,但现在只针对接口的变化。

        6
  •  4
  •   brian d foy    16 年前

    您可以尝试使用 PPI

    或者您可以将代码移植到 Perl 6 ,等待 Pynie 准备好允许在同一运行时内从Python直接调用Perl6!毕竟它并不遥远。太糟糕了 Ponie 但是他死了。

        7
  •  1
  •   Bharath Suryakanthan    10 年前

    https://perthon.sourceforge.net 可能有用吗?虽然它仍然在阿尔法,我看到了很多潜力。