7

是否有可能翻譯一種語言到另一個翻譯?將一種語言翻譯成另一種語言?

聽說quercus可以將php轉換爲java嗎?起初,我認爲這是一個便宜的糟糕的解決方案,可能會導致代碼錯誤,但似乎完全有可能這樣做。

你能把php翻譯成其他語言,比如python或ruby嗎? C++到Java等?

+0

你可以有一個產生糟糕,但工作的解決方案便宜糟糕的解決方案。作爲一般規則,你不能輕易地在各種語言之間進行翻譯,而且你也不能在糟糕的基礎機器上做好工作。 – 2011-04-23 08:59:10

+0

一個標準的錯誤答案是,「將原始語言翻譯爲模擬原始語言語義的目標語言庫的調用」;本質上你是建立一個口譯員。你可以隨時做到這一點;一臺圖靈機可以總是模仿另一臺圖靈機。但是這種翻譯的結果通常是非常糟糕的,沒有按照目標語言培訓的維護人員期望的方式使用目標語言,而且經常需要很高的開銷(所有這些模擬調用)才能啓動。所以,你總是可以做到這一點,但你不應該這樣做。 – 2011-04-23 09:05:18

+0

查看我的SO answer on how to translate between languages 2011-04-23 08:52:38

回答

11

將一種語言翻譯爲另一種語言對於稱爲編譯器,解釋器和翻譯器的程序類來說只是一個特例。

這個類的程序將需要輸入符號流(「源代碼」),其可以通常被正式語法描述的和將輸出符號流。

即符號的輸出流可以是:

  • 本機彙編代碼,通常爲操作系統和硬件機器上運行。如果是這樣,該程序被稱爲編譯器;
  • 不同操作系統和/或硬件的本機彙編代碼。這也可以稱爲編譯器,但通常稱爲交叉編譯器;
  • 中間形式可以由某種虛擬機執行。這不是一個真正的編譯器,但通常稱爲編譯器。 Java,C#,F#,VB.NET等「編譯器」都屬於這一類;
  • 完全用另一種語言。這就是所謂的翻譯器,並且有一些例如Java to C#翻譯器。他們通常有不同程度的成功,因爲成語常常不易翻譯;
  • 口譯員遵循相同的原則,但通常在原地執行處理過的表格而不是將其保存在某處。 Perl,PHP和shell腳本都屬於這一類。例如,PHP將操作碼緩存中的操作碼存儲爲中間形式(如果啓用了操作碼緩存),但該中間形式未被存儲,因此調用PHP解釋器仍然是安全的。
+0

有沒有可以建議的書籍,教程或例子?即使是簡單的一個 – lostmylogin 2018-03-07 06:28:13

5

問題出現在成語翻譯得不好的時候,或者來自或來自。你得到的代碼在語法上是有效的,但看起來它是由酸性人寫的。

+0

+1對於酸赫赫 – 2010-01-13 07:58:25

+0

但它的工作原理?:) – ajsie 2010-01-13 09:06:14

+0

不能證明多快或好,但肯定。 – 2010-01-13 09:15:40

1

這可能不是你所追求的,但有痛飲 http://en.wikipedia.org/wiki/SWIG

我們使用它在我們的項目之一,以創建一個C++框架的Python,Java和Ruby的綁定/包裝。在實踐中看到它在http://marsyas.sness.net

+0

我不太明白......它在純英文中做了什麼? – ajsie 2010-01-13 09:05:12

2

SO爲「transpiler」爲一些指針搜索:https://stackoverflow.com/search?q=transpiler

+2

+1,從來沒有聽說過的術語transpiler。聽起來很老土,但有用。 – 2010-01-13 08:11:18

+0

-1,我一直在建造翻譯工具很長一段時間,每當你聽到像「譯員」或「代碼轉換器」而不僅僅是「譯者」這樣的螺旋球術語時,答案本身就是一團糟,如果不是一個好的解決方案完全可以工作。我看過的那些實際上會產生答案,但只有通過回答你的意思是「翻譯並運行並且是維持的徹底噩夢」。參見關於生產JOBOL的NACA的討論:http://stackoverflow.com/questions/1029974/experience-migrating-legacy-cobol-pl1-to-java/1061829#1061829 – 2011-04-23 08:53:55

+1

對不起,這不是你的教育;我的老師教過我這個術語。 – 2011-04-24 20:33:37

相關問題