我正在尝试在纯 Python 环境(Google AppEngine)中执行简单的 JavaScript 代码。
我尝试过 PYJON,但它似乎还不够成熟,无法真正使用(它不处理例如前向引用函数或 do-while 并且它挂在数组使用上)。
一种想法是使用 pynarcissus 将 JavaScript 转换为语法树,然后将此树转换为 Python AST,后者可以编译成 Python 字节码。
以前有人做过吗?这个想法有问题吗?
我正在尝试在纯 Python 环境(Google AppEngine)中执行简单的 JavaScript 代码。
我尝试过 PYJON,但它似乎还不够成熟,无法真正使用(它不处理例如前向引用函数或 do-while 并且它挂在数组使用上)。
一种想法是使用 pynarcissus 将 JavaScript 转换为语法树,然后将此树转换为 Python AST,后者可以编译成 Python 字节码。
以前有人做过吗?这个想法有问题吗?
我使用ply做了类似的事情,对于 VBScript 和我一直在研究的一种新语言,但是我没有构建 AST 然后转换为 Python AST,而是直接构建 Python AST,使用它节点类,偶尔子类化和覆盖一些不太适合的类。
由于您可以依靠 pynarcissus 为 Javascript 构建 AST,因此转换 AST 可能更容易,但我认为值得检查使用它的解析器构建 Python AST 是否不是更好的方法。
据我所知,这种方法没有固有的问题,只要语言可以在句法上简化为通用方言。这是一项艰苦的工作,但可以做到。我这样做是因为我没有可用的解析器,并且编写一个仅仅构建 AST 是没有意义的。对于 VBScript,我只处理录制的宏,因此代码非常稳定,主要是单行代码。
据我所知,Python 上没有完整且健壮的 Javascript 解释器实现。您最好的选择可能是使用 Java 中的 Rhino 解释器部署您的应用程序的替代版本,并将其作为 Web 服务与您的应用程序的主要版本一起调用。