寫一個(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ǔ)言。