是否有用于Perl到Python转换的编程工具?

Jam*_*son 21 python perl parsing compilation

在我的新工作中,有更多的人使用Python而不是Perl,我有一个非常有用的API,我自己编写,我想让我的同事用Python.

我认为将Perl代码编译成Python代码的编译器对于这样的任务非常有用.在尝试编写解析Perl的东西之前(或者至少是我用于定义API的Perl子集)之前,我从咨询公司那里找到了一个桥梁管理员.

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

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

编辑:我找到了perl.y,如果我要编写自己的编译器,这可能是一个起点.

Eli*_*sky 33

詹姆士,

我建议你只用Python重写模块,原因如下:

  1. 解析Perl很难.除非这对你来说是一项重要且理想的练习,否则你会发现自己花在翻译上的时间比在有用的工作上花费时间多得多.
  2. 通过重写它,你将有很好的机会练习Python.学习最好通过做,并且完成一项你真正需要完成的任务是一个很大的好处.
  3. 最后,Python和Perl有着截然不同的哲学.要获得更多的Pythonic API,最好只用Python重写它.

  • s/PERL/Perl/g(除非你比我怀疑的更狡猾) (6认同)
  • @Bastien:它是一个Perl正则表达式替换命令,意思是"全局替换PERL PERL(即所有出现次数)" (3认同)

wei*_*mat 19

我想你应该重写你的代码.解析工作的结果质量取决于您的Perl编码风格.我认为下面的引文很好地总结了理论方面.来自维基百科:维基百科中的Perl

Perl有一个图灵完备语法,因为解析可能会受到编译阶段执行的运行时代码的影响.[25] 因此,Perl无法通过直接的Lex/Yacc词法分析器/解析器组合进行解析.相反,解释器实现了自己的词法分析器,它与修改后的GNU bison解析器协调以解决语言中的歧义.

人们常说"只有perl可以解析Perl",这意味着只有Perl解释器(perl)才能解析Perl语言(Perl),但即便如此,这一点也不正确.因为Perl解释器可以在编译阶段模拟图灵机,所以需要决定停止问题以便在每种情况下完成解析.这是一个长期存在的结果,Halting问题是不可判定的,因此即使Perl也不能解析Perl.Perl做出了不寻常的选择,让用户可以在自己的编译阶段获得完整的编程能力.理论纯度方面的成本很高,但实际上的不便似乎很少见.

承担解析Perl的其他程序,如源代码分析器和自动压缩器,不仅要与模糊的句法结构竞争,还要与一般情况下Perl解析的不可判断性相抗衡.Adam Kennedy的PPI项目专注于将Perl代码解析为文档(保留其作为文档的完整性),而不是将Perl解析为可执行代码(甚至Perl本身也无法做到).肯尼迪首先推测说,"解析Perl会遇到'停机问题'."[26],后来证明了这一点.[27]


yst*_*sth 7

从5.10开始,您可以在启用实验Misc属性装饰的情况下编译perl,并将PERL_XMLDUMP环境变量设置为文件名以获取解析树的XML转储(包括注释 - 对语言翻译非常有用).虽然正如医生所说,这是一项正在进行中的工作.


jit*_*ter 6

我从来没有尝试过,它似乎没有维护,但也许PyPerl是一个选项?

这个API有多大?如果它真的有用那你为什么不在python中重写它.编写自动转换器可能需要更长时间才能重写API.

即使你设法自动重写它,最终的代码可能也不会非常pythonic.

请务必查看weismat和eliben的答案