2012-04-23 102 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