加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么不可能创建一个实用的Perl到Python源代码转换器?

发布时间:2020-12-15 21:15:39 所属栏目:大数据 来源:网络整理
导读:如果存在一个自动将Perl代码转换为Python代码的程序,那么这将是很好的,使得生成的Python程序可以像原始代码一样可读和可维护,更不用说以相同的方式工作了. 最明显的解决方案是通过Python utils调用perl: #!/usr/bin/pythonos.exec("tail -n -2 "+__file__+"
如果存在一个自动将Perl代码转换为Python代码的程序,那么这将是很好的,使得生成的Python程序可以像原始代码一样可读和可维护,更不用说以相同的方式工作了.

最明显的解决方案是通过Python utils调用perl:

#!/usr/bin/python
os.exec("tail -n -2 "+__file__+" | perl -")
...the rest of file is the original perl program...

但是,结果代码几乎不是Python代码,它本质上是一个Perl代码.潜在的转换器应该将Perl构造和习语转换为易于阅读的Python代码,它应该保留变量和子例程名称(即结果不应该看起来模糊)并且不应该过多地破坏wrokflow.

这样的转换显然非常困难.转换的硬度取决于Perl特性和语法结构的数量,这些特征和语法结构没有易于阅读,未经过混淆的Python等价物.我相信大量的这样的特征使得这种自动转换实际上是不可能的(理论上存在可能性).

那么,您能否将Perl惯用语和语法功能命名为Python中不能像原始Perl代码那样简洁?

编辑:有些人将Python-to-Perl召集人联系起来,并在此基础上推断出,编写Perl-to-Python也应该很容易.但是,我确信转换为Python的需求更大;仍然没有写这个转换器 – 而反过来已经!这让我对不可能为Python编写好的转换器更加坚定.

解决方法

为了扩展这里的一些其他列表,这些是一些在python中可能非常笨拙的Perl构造(如果可能的话).

>动态范围(通过local关键字)
> typeglob操作(具有相同名称的多个变量)
>格式(它们都有自己的语法)
>关于可变变量的闭包
> pragma
> lvalue子例程(mysub()= 5;类型代码)
>源过滤器
> context(list vs scalar,以及调用代码可以使用wantarray检查它的方式)
>类型强制/动态类型
>任何使用字符串eval的程序

列表继续进行,有人可以尝试在所有类似的构造之间创建映射,但最终由于一个简单的原因将失败.

Perl无法进行静态解析. Perl代码中的定义(特别是BEGIN块中的定义)改变了编译器解释剩余代码的方式.因此,对于非平凡的程序,从Perl转换=> Python受制于暂停问题.

在程序运行完成之前,没有办法确切知道所有程序的编译方式,理论上可以创建一个Perl程序,每次运行时都会编译不同的程序.这意味着一个Perl程序可以映射到无限数量的Python程序,只有在perl解释器中运行原始程序后才能知道它的正确性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读