首先我要说的是,我不是在寻找自动化解决方案。我想将代码从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循环,条件等)。我的想法是有一个工具可以翻译所有这些非常“简单”的案例,然后我可以手工完成或教授规则系统。
您是否知道任何可以帮助我的编程翻译工具或库?
如果您没有听说过任何工具,您将使用哪种技术/模式来实现此类翻译?你能提供一个例子的链接吗?
由于
答案 0 :(得分:3)
您需要解析Python代码,遍历解析器生成的抽象语法树并输出您的Smalltalk。有一篇很好的关于Python Eli Bendersky的文章和一篇稍早的here的文章。 Python使得这一点相对简单,因为Python标准库暴露了解释器的许多内部工具,documentation相当全面。
答案 1 :(得分:1)
我不知道任何这样的工具,并且在一般情况下它可能是复杂的和/或低效的。因此,您的路线将取决于您更精确的需求:移植现有的python库,只需使用smalltalk,或制作与python相同的干净的小型代码。
我会考虑的路线:
请注意,在一般情况下,生成器变体可能会遇到一些难题,例如,smalltalk具有固定数量的实例变量,而在python中,您可以随时附加。你可以解决这个问题,但是产生的smalltalk代码可能不是很好。
至于在smalltalk中实现python,看看Lukas Renggli的helvetia演示,它是在smalltalk IDE中包含其他语言的主题。
答案 2 :(得分:0)
查看ply,这是一个Lex-Yacc Python实现。我主要是通过用它来构建Python AST来将其他语言翻译成Python字节码,但反过来也应该是这样。