从JavaScript转换为Python代码?

54 投票
4 回答
118032 浏览
提问于 2025-04-15 19:47

有没有什么比较简单的程序可以做到这个基本的功能?只需要几个正则表达式就行。我愿意手动转换一些内容,但这组脚本还挺大的。

4 个回答

11

这个回答可能晚了大约两年,但如果我们考虑从 JavaScript 转到 CoffeeScript,再到 Python 呢?如果你使用像 http://js2.coffee/ 这样的工具来转换成 CoffeeScript,那么像缩进和列表这些格式的事情就已经帮你处理好了。

40

你可以使用 Js2Py 将JavaScript转换成Python。这个工具支持完整的JavaScript,你可以用它来翻译大型的JavaScript模块,比如 esprima.js(这是一个JavaScript 6的解析器)。


简短演示:

>>> import js2py
>>> f = js2py.eval_js( "function $(a) {return a + arguments[1]}" )
>>> f
function $(a) { [python code] }
>>> f(1, 2, 3)
3

这是转换后的函数在内部的样子(看起来有点复杂):

>>> print js2py.translate_js( "function $(a) {return a + arguments[1]}" )
from js2py.pyjs import *
var = Scope( JS_BUILTINS )
set_global_object(var)
# Code follows:
var.registers([u'$'])
@Js
def PyJsHoistedNonPyName(a, this, arguments, var=var):
    var = Scope({u'a':a, u'this':this, u'arguments':arguments}, var)
    var.registers([u'a'])
    return (var.get(u'a')+var.get(u'arguments').get(u'1'))
PyJsHoistedNonPyName.func_name = u'$'
var.put(u'$', PyJsHoistedNonPyName)
20

更新

现在,经过几年的发展(大约4年),这件事(几乎可以肯定)是可以做到的;不过肯定不能用正则表达式来实现。我建议未来的读者看看@Piotr Dabkowski的回答。或者其他一些答案。(我没有尝试过,所以不太清楚)


原始回答

嗯,这个问题挺难的。编译器的定义是把一种高级语言翻译成一种低级语言。比如说,把Python翻译成机器代码,或者把Java翻译成JavaScript(谷歌有一个相当有名的编译器,能让谷歌文档更容易制作)。Python到JavaScript的编译器有很多。技术上来说,把JavaScript翻译成Python应该算是反编译器。(据我所知)

我找到了一些关于JavaScript和Python转换器的猜测,在这里:可以跟着讨论往下看。主要说的是这件事其实并不难做到。我找不到相关的东西,但这并不意味着外面没有。

正则表达式不适合这个用途,正则表达式只适合处理规则语言。而编程语言通常不是规则语言。可以看看这个链接

撰写回答