編譯器是如何編譯自己的?

時間 2021-05-29 22:49:56

1樓:何源

比如你是馬雲,沒身份證(編譯器)之前怎麼證明自己是馬雲。

那你得弄來一張名為馬雲的身份證(編譯器)。

問題來了,這張身份證怎麼來呢?

你去找你爸要了戶口本(其他語言的編譯器)去派出所填寫了自己的資料(自己編譯器原始碼)辦理身份證,因為戶口本上你的名字是馬雲,派出所給了一張名為馬雲的身份證。

從此,你不用戶口本,只用自己的身份證證明了你是馬雲(自己編譯自己)。

從此,你可以用這個身份證去開花唄,信用卡,住酒店,去名為會所的地獄的三樓,凶神惡煞的女鬼們紛紛叫你馬雲老闆,爸爸,生活繽紛多彩。

這就自舉,self-referencing

直到後來你舉不動了,不舉了。就被淘汰了,參照basic。

2樓:石松

1…為了行文方便,假設起初你有乙個 pascal編譯器名叫 maps.exe。 有乙個聰明的你,寫了乙個程式名叫c1.

pas,被編譯成 c1.exe後,它能讀入明碼文 ,而產出機械文。起初c1.

pas很簡短。

2…有一天你寫了乙個很短的c2.pas ,經由c1.exe 執行而產生了 c2.

exe ,聰明的你把c2.exe加掛到c1.exe下面 ,增強了c1.

exe功能,稱為c3.exe

你想到第2步不斷迴圈,c3變c4,c4變 c5 ,從此開啟了自迴圈的編譯器進化。

3樓:未填寫

編譯是將高階語言翻譯成機器碼。

早期的組合語言編譯軟體很直白,一行程式等於一條機器碼。movb=010110101,jmp=101011011,ox08=00000100。

就像小學考題給漢字注上拼音。方法就是查表,查到了mov之類替換,查不到報錯。標記為A()。

後來,語言公升級,大家發現某個彙編檔案B.ASM可以完成B功能,那麼寫源程式就寫一行B(),編譯軟體A檢測到原始檔文字中的B(),會自動將機器碼替換這些字串。像成語解釋,四個字替換出一大堆。

還是查表法。此時的軟體A包含B.ASM。

到這兒就說的有些繁瑣了。第乙個編譯軟體,就是乙個機器碼的查表替換演算法,將ASCII的彙編指令檔案,替換成乙個機器碼的檔案。純手工編織。

後來A越來越大,包含幾千個ASM和對應的機器碼,就是比較完善的標準庫和庫函式。

略過了if之類的判斷怎麼做的,因為我沒學過編譯原理。

4樓:豬排蓋飯

這個問題可以無限拓展啊,工具機是由工具機生產的,那生產工具機的工具機又是如何生產的?

cpu是由計算機輔助設計的,那設計cpu的時候使用的cpu是如何設計的?

或者再深入一點,如果能夠攜帶所有現代知識穿越回古代,如何能迅速建立起現代工業體系?

歸根結底,一切都是從lucy來的好了,或者說,一切都是從第乙個使用工具的猴子開始,然後以工具創造工具,創造更高階的工具,來生產更更高階的工具。

5樓:阿怪

我是來亂的

不過就算是 python

也可以x=open(『/bin/python』, 『rb』)open(『./pythonplus』, 『wb』).write(x)

這樣算不算自己寫了乙個自己呢?

6樓:wkGCaSS

假如你想寫乙個b語言怎麼辦?我們用符號表示一些量:a:一種語言,aB:使用a語言寫的b語言編譯器原始碼,AB:使用a語言編譯器編譯的b語言編譯器

用乙個已有語言a寫語言b的編譯器原始碼aB,使用已有編譯器AA編譯aB得到AB

用b寫語言b的編譯器原始碼bB,使用AB編譯bB得到BB現在,BB就是用b編譯的,並且能編譯b。

這就是自舉。

7樓:吳吃辣

用另外乙個編譯器,那另外乙個編譯器呢...

好吧這是乙個遞迴,一直下去會回到不需要編譯器的時代,直接用0101的二進位製碼寫的

簡單粗暴地說,你可以理解為第乙個編譯器是用機器碼寫的,不需要編譯

8樓:Yuan

而且你還可以繼續追問:編譯器作為乙個軟體,需要執行在作業系統之上並接受作業系統的管理才能夠在硬體上執行,而作業系統本身也是乙個軟體,需要編譯器編譯才能夠執行,因此沒有作業系統就沒有編譯器的執行環境,而沒有編譯器就沒有可執行的作業系統。

你看,也貌似雞生蛋蛋生雞了

9樓:「已登出」

舊版本的編譯器或者另乙個語言寫的編譯器,如果追溯到最早,就是早期程式設計師用機器語言寫的。

話說這個問題在編譯原理這門課會講呀

10樓:大江山嵐

一點淺見,計算機的硬體層就有指令系統了,即risc和cisc,原則上在這一層就可以程式設計了。不過因為太難了,人們才發明了各種更高抽象層次的程式語言,但是不管什麼語言都得翻譯成硬體看得懂的指令才能執行,編譯器就是幹這個事的。所以應該是用底層的指令去設計第乙個編譯器。

11樓:葉璟

類似的問題還有linux的動態鏈結器linux.ld.so本身也是乙個動態庫,那麼它的符號重定位和got解析是誰完成的呢?也是乙個bootstrap的概念

編譯器是如何工作的?

就事論事的話,推薦你讀Neil Jones 等著的Automatic Partial Evaluation and Program Generation,這本書的開頭應該解決了你想的問題.至於你想知道編譯器中間過程的原理,可是本來編譯器就是把乙個語言變成另乙個語言的程式.建議你先讀讀EoPL3的1 ...

如何開發編譯器?

gitlab.gnome.org GNOME vala issues?milestone title 1.0 發展中的編譯器,正好可以做學習和研究。 Anges 說一下做過的編譯器前端部分 動態生成語法樹,詞法解析,主要利用狀態機,更高階點nfa轉行dfa,其實解析起來也沒有大家說的那麼難,會基本的...

新版本編譯器是用自己(新版本編譯器)重新編譯後發布還是用舊版本編譯器編譯發布?

要看這編譯器有沒有自信和能力了。比如VC就是自己編譯自己發布的,gcc也能做到。但有些編譯器比如keil只能編譯C51,你讓它咋自舉?還有些編譯器過於輕量化,比如LCC 不確定 編譯不了自己用的高階特性,就只能靠別人了。 藍色 雖然說編譯器自舉是乙個里程碑事件,但是並非每一次編譯器發布都一定自舉了才...