第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我可以在代碼上強(qiáng)制什么類型的模式來使轉(zhuǎn)換成另一種編程語(yǔ)言更容易呢?

我可以在代碼上強(qiáng)制什么類型的模式來使轉(zhuǎn)換成另一種編程語(yǔ)言更容易呢?

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

3 回答

?
楊__羊羊

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊

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

簡(jiǎn)言之:不要使用解析器模塊,有一個(gè)更簡(jiǎn)單的方法。

這個(gè)ast模塊,因?yàn)镻ython2.6更適合您的需要,因?yàn)樗鼮槟峁┝艘粋€(gè)現(xiàn)成的AST。我寫了一個(gè)關(guān)于這方面的文章去年,但簡(jiǎn)而言之,使用parse方法ast將Python源代碼解析為AST。這個(gè)parser模塊將給您一個(gè)解析樹,而不是AST。提防差別.

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

要給你最后一個(gè)提示,請(qǐng)考慮2to3由Pythondevs創(chuàng)建的工具,用于將Python 2代碼轉(zhuǎn)換為Python 3代碼。就前端而言,它具有您需要將Python轉(zhuǎn)換為的大多數(shù)元素。某物..但是,由于Python 2和3的內(nèi)核是相似的,因此不需要仿真機(jī)器。


查看完整回答
反對(duì) 回復(fù) 2019-06-26
?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊

寫一個(gè)翻譯并不是不可能的,特別是考慮到喬爾的實(shí)習(xí)生做了一個(gè)夏天。

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

例如:

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

采取羅得C+代碼的復(fù)制(好的,你可以用一些循環(huán)結(jié)構(gòu)做得很短,但仍然是這樣)。

我想這有點(diǎn)離題吧。

您曾經(jīng)基于語(yǔ)言語(yǔ)法編寫過標(biāo)記器/解析器嗎?如果你沒有這樣做的話,你可能想學(xué)習(xí)如何去做,因?yàn)檫@是這個(gè)項(xiàng)目的主要部分。我要做的是想出一個(gè)基本的圖靈完整語(yǔ)法-類似于Python。字節(jié)碼..然后創(chuàng)建一個(gè)接受語(yǔ)言語(yǔ)法的詞匯/解析器(可能使用BNF),并根據(jù)語(yǔ)法將語(yǔ)言編譯成您的中間語(yǔ)言。然后,您要做的是做相反的-創(chuàng)建一個(gè)解析器從您的語(yǔ)言到目標(biāo)語(yǔ)言的基礎(chǔ)上的語(yǔ)法。

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

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

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

  • 利潤(rùn)!(?)

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

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

向我展示另一種語(yǔ)言,它可以在4行中完成類似的任務(wù),我將向您展示一種與Python一樣強(qiáng)大的語(yǔ)言。


查看完整回答
反對(duì) 回復(fù) 2019-06-26
  • 3 回答
  • 0 關(guān)注
  • 526 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)