2012-04-23 72 views
6

让我先说我不是在这里搜索自动化解决方案。我想从Python的转换代码Smalltalk的,因为我已经注意到一些很简单的句子可以自动翻译,例子:将代码从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 ] 

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

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

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

感谢

+0

你需要编写一个反编译器。维基百科列表中至少有两个来自python - >(C,javascript)的翻译,您可以将其用作基础https://en.wikipedia.org/wiki/Source-to-source_compiler – gcb 2015-02-04 08:30:28

回答

1

我不知道有任何这样的工具,并且在一般情况下它可能会很复杂和/或效率低下。所以你的路线将取决于你更精确的需求:移植一个现有的python库,从smalltalk中使用它,或者做一个和python相同的很好的干净的smalltalk代码。

路线,我会考虑:

  • 离开Python库原样,并从Smalltalk中调用它通过C接口
  • 在佩蒂特解析器实现的Python解析器,则:
    • 实施Smalltalk的发电机可能协助由人类通过用户界面
    • python interpreter in smalltalk

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

至于在Smalltalk里面实现python看一下Lukas Renggli的Helvetia演示,它是关于在Smalltalk IDE中包含其他语言的主题。

+1

您也可以(如果您不介意其GPL许可证)使用OpenQwaq的Python-Smalltalk桥接器:http://squeakingalong.wordpress.com/2011/05/04/openqwaq-python-integration/ – 2012-04-23 10:43:12

+0

我不知道它,伟大的提示! – 2012-04-23 13:48:32

3

您需要解析Python代码,走路由分析器和输出你的Smalltalk产生的抽象语法树。有一篇关于Python AST的文章Eli Bendersky和一个稍旧的文章here。由于Python标准库提供了大量的解释器的内部工具,并且它相当全面,Python使得这个过程相对简单明了。

0

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

+0

这是一个很好的观点,层是一个令人印象深刻的工具包,但它确实意味着从头开始编写解析器。使用标准库中的'ast'意味着OP可以利用进入CPython解析器的工作。 – snim2 2012-04-23 15:52:33

+0

好的一点,但是ply在大多数Python语法中都有一个示例实现。 – 2012-04-23 17:37:45

+0

谢谢,我不知道! – snim2 2012-04-24 07:51:57