2008-12-03 84 views
3

我試圖確定以下想法的現有技術:可運行的僞代碼?

1)某些代碼中的用戶鍵入一種名爲(insert_name_here)的語言;

2)用戶從衆所周知的輸出候選列表(javascript,ruby,perl,python)中選擇一個目標語言; 3)處理器將insert_name_here翻譯成目標語言的可運行代碼;

4)所述處理器然後運行使用基於所選擇的語言相關的系統調用的代碼

這工作的原因是因爲有預先建立從insert_name_here所有語言構造之間1對1映射到所有支持的目標語言。

免責聲明:這顯然不會產生符合目標語言的「優雅」代碼,它只是一個可運行的基本翻譯,目的是讓開發人員快速獲得 - 對於那些他們不想重新發明輪子但是因爲任何原因需要在特定項目中使用特定語言而需要的幾種不同語言的算法的自然實現)。

這是否已經存在?

回答

2

有轉換器可用於不同的語言。你將面臨的問題是與圖書館打交道。雖然語言語句之間的映射可能很容易,但查找庫函數之間的映射將非常困難。

我不太確定這種類型的代碼生成器是多麼有用。你爲什麼要用一種語言寫一些東西,然後立即將它轉換成其他東西?我可以看到將圖表或模型轉換爲代碼的第四代語言的基本原理,但我並沒有真正看到您的努力點。

4

.NET CLR的設計使C++ .Net,C#.Net和VB.Net都可以編譯爲相同的機器語言,並且可以將CLI反編譯成任何一種語言。

所以,我會說它已經存在,雖然不完全如你所描述。

+1

事實上,紅門的反射器工具,你可以輕鬆地轉換語言。 – 2008-12-03 22:00:41

2

這似乎有點奇怪。如果您以最常見的形式使用術語「現有技術」,那麼您正在討論一個可能獲得專利的想法。如果的情況下,你必須:

1 /出版的想法,開始對專利申請運行時鐘 - 我猜想,也許是不正確的,那你總部設在美國其他國家也可能有其他規則。

2 /告訴整個星球你的想法,這意味着它幾乎沒用,試圖申請專利,除非你的行動非常快。

如果您沒有考慮將此專利考慮在內,並且只是在非專業人士的意義上使用術語「現有技術」,我表示歉意。我爲一家非常重視專利的公司工作,它非常詳細地介紹了我們在提交信息之前可以處理的信息。

話雖如此,可專利的想法必須是新穎的,有用的和不明顯的。我認爲你的想法不會通過第三個,因爲你正在描述一個語言翻譯器,它將具有許多pascal-to-c和fortran-to-c轉換器的現有技術。

希望的一線希望是您的想法能夠產生多種輸出語言之一(p2c和f2c不會這樣做),但我認爲即使這種能力會被類似於交叉編譯器(例如gcc)將源代碼轉換成許多不同的對象語言之一。

IBM有一款名爲Visual Age Generator的產品,您可以使用一種(專有)語言編寫代碼,並將其轉換爲COBOL/C/Java /其他語言,以便從PC到不同的目標平臺上運行到大型的System z大型機,所以這是你的第一個問題(考慮將全球最大的專利代理商IBM已經在使用的想法申請專利)。

2

噸。 p2c,f2c以及C++和Objective C的原始實現都立即引起我的注意。除此之外,很難區分你從任何編譯器所描述的內容,特別是對於我們的編譯器生成ASM代碼以實現中間表示的老人。

3

是的,一個程序將程序從一個表示轉換爲另一個表示確實存在。它被稱爲「編譯器」。

至於你的問題是否永遠有可能:只要你的目標語言至少與源語言一樣強大,那麼這是可能的。所以,如果你的目標語言是圖靈完整的,那麼它總是可能,因爲沒有比圖靈完全語言更強大的語言。

但是,並不需要啞巴1:1映射。

例如:將CIL字節碼編譯爲JavaScript源代碼的Microsoft Volta編譯器存在問題:.NET有線程,JavaScript沒有。但是你可以用延續來實現線程。那麼,JavaScript也沒有延續,但你可以實現延續與例外。所以,Volta將CIL轉換爲CPS,然後以例外的方式實現CPS。 (較新版本的JavaScript具有發生器形式的半協同程序;也可以使用這些程序,但Volta打算跨多種JavaScript版本工作,包括Internet Explorer中的顯然JScript。)