将代码从Python转换为Smalltalk

时间:2012-04-23 00:40:30

标签: python smalltalk code-translation

首先我要说的是,我不是在寻找自动化解决方案。我想将代码从Python翻译成Smalltalk,因为我注意到一些非常简单的句子可以自动翻译,例如:

将变量分配给值

的Python

i = 1

Smalltalk中

i := 1.

创建类的新实例

的Python

instance = module.ClassName()

Smalltalk中

instance := ClassName new.

for循环

的Python

for a in [0,1,2]:
  print (str(a)+str(a))

Smalltalk中

#(0 1 2) do: [: a | Transcript show: a + a; cr ]

依此类推(while循环,条件等)。我的想法是有一个工具可以翻译所有这些非常“简单”的案例,然后我可以手工完成或教授规则系统。

您是否知道任何可以帮助我的编程翻译工具或库?

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

由于

3 个答案:

答案 0 :(得分:3)

您需要解析Python代码,遍历解析器生成的抽象语法树并输出您的Smalltalk。有一篇很好的关于Python Eli Bendersky的文章和一篇稍早的here的文章。 Python使得这一点相对简单,因为Python标准库暴露了解释器的许多内部工具,documentation相当全面。

答案 1 :(得分:1)

我不知道任何这样的工具,并且在一般情况下它可能是复杂的和/或低效的。因此,您的路线将取决于您更精确的需求:移植现有的python库,只需使用smalltalk,或制作与python相同的干净的小型代码。

我会考虑的路线:

  • 按原样离开python库,并从smalltalk通过c接口调用它
  • 在pettit解析器中实现python解析器然后:
    • 实现smalltalk生成器可以通过用户界面辅助
    • 在smalltalk中的python解释器

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

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

答案 2 :(得分:0)

查看ply,这是一个Lex-Yacc Python实现。我主要是通过用它来构建Python AST来将其他语言翻译成Python字节码,但反过来也应该是这样。