寫一個翻譯并不是不可能的,特別是考慮到喬爾的實習生做了一個夏天。
如果你想學一種語言,這很容易。如果你想做的更多,這是有點困難,但不是太多。最難的部分是,盡管任何圖靈完整語言都可以完成另一種圖靈完整語言所做的工作,但內置的數據類型可以顯著地改變一種語言所做的事情。
例如:
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一樣強大的語言。