将代码从 Python 转换为 Smalltalk
Posted
技术标签:
【中文标题】将代码从 Python 转换为 Smalltalk【英文标题】:Translating code from Python to Smalltalk 【发布时间】:2012-04-23 00:40:30 【问题描述】:首先让我说,我不是在这里寻找自动解决方案。我想将代码从 Python 翻译成 Smalltalk,因为我注意到一些非常简单的句子可以自动翻译,例如:
将变量分配给值
Python
i = 1
闲聊
i := 1.
创建一个类的新实例
Python
instance = module.ClassName()
闲聊
instance := ClassName new.
for 循环
Python
for a in [0,1,2]:
print (str(a)+str(a))
闲聊
#(0 1 2) do: [: a | Transcript show: a + a; cr ]
等等(while 循环、条件等)。我的想法是有一个工具来翻译所有这些极其“简单”的案例,然后我可以手动完成或教授一个规则系统。
你知道任何可以帮助我的编程翻译工具或库吗?
如果您还没有听说过任何工具,您将使用什么技术/模式来实现这种翻译?你能提供一个例子的链接吗?
谢谢
【问题讨论】:
你需要写一个转编译器。***列出了至少两个从 python->(C, javascript) 翻译的,您可以用作基础 en.wikipedia.org/wiki/Source-to-source_compiler 【参考方案1】:您需要解析 Python 代码,遍历解析器生成的抽象语法树并输出您的 Smalltalk。 Eli Bendersky 有一篇关于 Python AST 的好文章,还有一篇稍老的 here。 Python 使这一点相对简单,因为 Python 标准库公开了许多解释器的内部工具,而且 documentation 相当全面。
【讨论】:
【参考方案2】:我不知道有任何此类工具,一般情况下它可能很复杂和/或效率低下。因此,您的路线将取决于您更精确的需求:移植现有的 python 库,仅从 smalltalk 中使用它,或者编写与 python 执行相同操作的漂亮干净的 smalltalk 代码。
我会考虑的路线:
保留 python 库,并通过 c 接口从 smalltalk 调用它 在小解析器中实现python解析器然后: 实现 smalltalk 生成器可以通过用户界面由人工辅助 smalltalk 中的 python 解释器请注意,生成器变体在一般情况下可能会遇到一些难题,例如 smalltalk 具有固定数量的实例变量,而在 python 中,您可以随时附加。你可以解决这个问题,但生成的 smalltalk 代码可能并不漂亮。
关于在 smalltalk 中实现 python,请看 Lukas Renggli 的 helvetia 演示,它是关于在 smalltalk IDE 中包含其他语言的主题。
【讨论】:
你也可以(如果你不介意它的 GPL 许可证)使用 OpenQwaq 的 Python-Smalltalk 桥:squeakingalong.wordpress.com/2011/05/04/… 我不知道,很棒的提示!【参考方案3】:看看ply,这是一个 Lex-Yacc Python 实现。我主要将它用于通过构建 Python AST 将其他语言转换为 Python 字节码,但相反的情况也应该是可能的。
【讨论】:
这是一个很好的观点,ply 是一个令人印象深刻的工具包,但它确实意味着从头开始编写解析器。使用标准库中的ast
意味着 OP 可以利用已进入 CPython 解析器的工作。
好点,但是 ply 有一个示例实现,包含大部分 Python 语法。以上是关于将代码从 Python 转换为 Smalltalk的主要内容,如果未能解决你的问题,请参考以下文章