6

首先让我说,我不是在这里寻找自动解决方案。我想将代码从 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 循环、条件等)。我的想法是有一个工具来翻译所有这些极其“简单”的案例,然后我可以手动完成或教授一个规则系统。

你知道任何可以帮助我的编程翻译工具或库吗?

如果您还没有听说过任何工具,您将使用什么技术/模式来实现这种翻译?你能提供一个例子的链接吗?

谢谢

4

3 回答 3

3

您需要解析 Python 代码,遍历解析器生成的抽象语法树并输出您的 Smalltalk。Eli Bendersky有一篇关于 Python AST 的好文章,还有一篇稍旧的文章。Python 使这相对简单,因为 Python 标准库公开了许多解释器的内部工具,并且文档相当全面。

于 2012-04-23T00:50:15.180 回答
1

我不知道有任何此类工具,一般情况下它可能很复杂和/或效率低下。因此,您的路线将取决于您更精确的需求:移植现有的 python 库,仅从 smalltalk 中使用它,或者制作与 python 执行相同操作的漂亮干净的 smalltalk 代码。

我会考虑的路线:

  • 保留python库,并通过c接口从smalltalk调用它
  • 在 pettit parser 中实现 python 解析器然后:
    • 实现 smalltalk 生成器可以通过用户界面由人工辅助
    • smalltalk中的python解释器

请注意,生成器变体在一般情况下可能会遇到一些难题,例如 smalltalk 具有固定数量的实例变量,而在 python 中,您可以随时附加。您可以解决这个问题,但生成的 smalltalk 代码可能并不漂亮。

至于在 smalltalk 中实现 python,请看 Lukas Renggli 的 helvetia 演示,它是关于在 smalltalk IDE 中包含其他语言的主题。

于 2012-04-23T06:34:50.153 回答
0

看看ply,它是一个 Lex-Yacc Python 实现。我主要将它用于通过使用它构建 Python AST 将其他一些语言转换为 Python 字节码,但相反的情况也应该是可能的。

于 2012-04-23T00:53:17.823 回答