|
(最早編寫(xiě)的語(yǔ)言就是在紙帶上打孔的編譯器實(shí)現(xiàn)原理是語(yǔ)法樹(shù)和自動(dòng)機(jī)) 計(jì)算機(jī)語(yǔ)言有一個(gè)分支學(xué)科叫《編譯原理》,作為一名很老的程序員,嘗試幫大家梳理一下。第一次學(xué)習(xí)編譯原理已經(jīng)是14年前的事了。如果大家想真正學(xué)好編程,《編譯原理》是最重要的基礎(chǔ)學(xué)科。 說(shuō)到計(jì)算機(jī)的語(yǔ)言體系就不得不從計(jì)算機(jī)的硬件底層說(shuō)起,所有編程語(yǔ)言的本質(zhì)其實(shí)都在是操作硬件。以下這些的層次關(guān)系。 計(jì)算語(yǔ)言的本質(zhì)就是在操作計(jì)算機(jī)硬件,重要的事情說(shuō)三遍哦??。 一、計(jì)算機(jī)有兩個(gè)很重要的概念,運(yùn)算器和存儲(chǔ)器。沒(méi)錯(cuò),運(yùn)算器就是中央處理器(CPU),存儲(chǔ)器就包括內(nèi)存和硬盤(pán),但內(nèi)存只不過(guò)是緩存,預(yù)先讀取和預(yù)先寫(xiě)入的操作,緩解硬盤(pán)的壓力。至于其他計(jì)算機(jī)硬件,如主板、包括主板上的南橋北橋芯片,顯示卡,音頻卡,USB處理器等等可以全部忽略。 二、硬盤(pán)的存儲(chǔ)結(jié)構(gòu)屬于物理存儲(chǔ),也就是只能存儲(chǔ)正負(fù)點(diǎn)電兩種狀態(tài)。這就決定了計(jì)算機(jī)的原始編程語(yǔ)言就是0和1。最早的編程員叫Ada,是位女性,她最早編寫(xiě)的語(yǔ)言就是在紙帶上打孔,101010001101011,差不多這個(gè)意思, 三、這種0和1組成的程序我們叫機(jī)器代碼,為了愉快編程,很快又有大神發(fā)明了匯編語(yǔ)言。其實(shí)就是發(fā)明了匯編語(yǔ)言的編譯器(翻譯器)把匯編語(yǔ)言轉(zhuǎn)換成了機(jī)器代碼。 四、最重要的語(yǔ)言出場(chǎng)了,C語(yǔ)言,目前C語(yǔ)言是最重要的語(yǔ)言,大家看出來(lái)了,它處在計(jì)算語(yǔ)言的中間、承上啟下。瀏覽器是C語(yǔ)言編寫(xiě)的,瀏覽器中的javascript html css就是運(yùn)行在瀏覽器的內(nèi)核引擎中的,它被動(dòng)態(tài)解釋并執(zhí)行;操作系統(tǒng)windows和mac也是C語(yǔ)言編寫(xiě)的,安卓基于java,java運(yùn)行在虛擬機(jī)上,java虛擬機(jī)就是C語(yǔ)言編寫(xiě)的。蘋(píng)果ios直接就是object-c(C語(yǔ)言的一個(gè)變種)編寫(xiě)的;就連PHP語(yǔ)言的編譯器也是C語(yǔ)言編寫(xiě)的,PHP語(yǔ)言被編譯成C語(yǔ)言,再被編譯成匯編代碼,再被編譯成機(jī)器代碼。 以上就是計(jì)算機(jī)語(yǔ)言的生態(tài)關(guān)系,但計(jì)算機(jī)語(yǔ)言自身的編譯器實(shí)現(xiàn)原理是什么呢?就兩個(gè)概念,語(yǔ)法樹(shù)和自動(dòng)機(jī),是的,《編譯原理》就是由語(yǔ)法樹(shù)和它的自動(dòng)機(jī)算法構(gòu)成的,一個(gè)是它的數(shù)據(jù)結(jié)構(gòu),一個(gè)是它的運(yùn)算過(guò)程(算法)。祝大家編程愉快。 |
|
|
來(lái)自: 山峰云繞 > 《編譯原理翻譯技術(shù)》