亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以在代碼上強制什么類型的模式來使轉換成另一種編程語言更容易呢?

我可以在代碼上強制什么類型的模式來使轉換成另一種編程語言更容易呢?

慕森王 2019-06-26 13:29:07
我可以在代碼上強制什么類型的模式來使轉換成另一種編程語言更容易呢?我正著手做一個附帶項目,其目標是將代碼從一種編程語言轉換為另一種編程語言。我開始使用的語言是PHP和Python(Python到PHP應該更容易開始),但理想情況下,我可以輕松地添加其他語言。計劃是:這是面向Web開發的。原始代碼和目標代碼將位于框架之上(我也必須編寫這些框架)。這些框架將采用MVC設計模式,并遵循嚴格的編碼約定。這應該會使翻譯更容易一些。我還研究了IoC和依賴項注入,因為它們可能使翻譯過程更容易,并且更容易出錯。我會利用Python的解析器模塊,這讓我可以擺弄抽象語法樹。顯然,我在PHP中能得到的最接近的是令牌get_all(),這是一個開始。從那時起,我可以建立AST,符號表和控制流。那我就可以開始輸出代碼了。我不需要完美的翻譯..我仍然需要檢查生成的代碼并修復問題。理想情況下,譯者應該標記有問題的翻譯。在你問“這到底有什么意義?”答案是.。這將是一次有趣的學習體驗。如果你對如何使這件事不那么令人畏懼有任何見解,請告訴我。編輯:我更感興趣的是,我可以在代碼上執行什么樣的模式,以便更容易地轉換(例如:IoC,SOA?)代碼比如何進行翻譯。
查看完整描述

3 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

我的回答將討論解析Python的具體任務,以便將其翻譯到另一種語言,而不是Ira在回答中很好地討論的更高層次的方面。

簡言之:不要使用解析器模塊,有一個更簡單的方法。

這個ast模塊,因為Python2.6更適合您的需要,因為它為您提供了一個現成的AST。我寫了一個關于這方面的文章去年,但簡而言之,使用parse方法ast將Python源代碼解析為AST。這個parser模塊將給您一個解析樹,而不是AST。提防差別.

現在,由于Python的AST非常詳細,假設有AST,前端工作并不難。我想您可以很快地為某些部分的功能準備一個簡單的原型。然而,獲得一個完整的解決方案需要更多的時間,主要是因為語言的語義不同。語言的一個簡單子集(函數、基本類型等)可以很容易地被翻譯,但是一旦進入更復雜的層,就需要大量的機器來模仿另一種語言的核心。例如,考慮Python的生成器和PHP中不存在的列表理解(據我所知,這在涉及PHP時顯然很差)。

要給你最后一個提示,請考慮2to3由Pythondevs創建的工具,用于將Python 2代碼轉換為Python 3代碼。就前端而言,它具有您需要將Python轉換為的大多數元素。某物..但是,由于Python 2和3的內核是相似的,因此不需要仿真機器。


查看完整回答
反對 回復 2019-06-26
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

寫一個翻譯并不是不可能的,特別是考慮到喬爾的實習生做了一個夏天。

如果你想學一種語言,這很容易。如果你想做的更多,這是有點困難,但不是太多。最難的部分是,盡管任何圖靈完整語言都可以完成另一種圖靈完整語言所做的工作,但內置的數據類型可以顯著地改變一種語言所做的事情。

例如:

word = 'This is not a word'print word[::-2]

采取羅得C+代碼的復制(好的,你可以用一些循環結構做得很短,但仍然是這樣)。

我想這有點離題吧。

您曾經基于語言語法編寫過標記器/解析器嗎?如果你沒有這樣做的話,你可能想學習如何去做,因為這是這個項目的主要部分。我要做的是想出一個基本的圖靈完整語法-類似于Python。字節碼..然后創建一個接受語言語法的詞匯/解析器(可能使用BNF),并根據語法將語言編譯成您的中間語言。然后,您要做的是做相反的-創建一個解析器從您的語言到目標語言的基礎上的語法。

我看到的最明顯的問題是,一開始你可能會可怕效率低下的代碼,特別是在更強大的*語言(如Python)中。

但是,如果您這樣做,那么您可能能夠找到優化輸出的方法??偨Y如下:

  • 讀提供語法
  • 將程序編譯成中間語法(但也包括圖靈完整語法)
  • 將中間程序編譯成最終語言(基于提供的語法)
  • ...?

  • 利潤!(?)

*我的意思是,這需要4行:

myinput = raw_input("Enter something: ")print myinput.replace('a', 'A')print sum(ord(c) for c in myinput)print myinput[::-1]

向我展示另一種語言,它可以在4行中完成類似的任務,我將向您展示一種與Python一樣強大的語言。


查看完整回答
反對 回復 2019-06-26
  • 3 回答
  • 0 關注
  • 530 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號