{eval=Array;=+count(Array);}
既然你能提出這個(gè)級(jí)別的問(wèn)題,說(shuō)明你應(yīng)該學(xué)過(guò)C。既然你能提出這個(gè)級(jí)別的問(wèn)題,說(shuō)明你沒(méi)學(xué)過(guò)編譯原理(或者全還給老師了[捂臉],容我不厚道一下下)。
你所謂的"C語(yǔ)言",準(zhǔn)確來(lái)說(shuō),指的是能把C語(yǔ)言程序翻譯成機(jī)器指令程序的"編譯器"程序。
先用匯編寫一個(gè)極小的原始編譯器(AC),能編譯最簡(jiǎn)單的C語(yǔ)法。然后用該原始編譯器AC編譯一個(gè)最簡(jiǎn)單的C編譯器(CC1)。然后用CC1編譯一個(gè)稍微復(fù)雜一點(diǎn)的C編譯器(CC2)。最終,像滾雪球一樣,C語(yǔ)言就把一個(gè)擁有完全編譯功能的C編譯器給編譯出來(lái)了。
推薦資料:陳火旺老師的經(jīng)典教材《編譯原理》,開篇講的就是這個(gè)問(wèn)題。
是用C語(yǔ)言編寫的。
這里有一個(gè)概念,就是編程語(yǔ)言的自舉。
自舉(bootstrapping)字面理解就是自己能把自己給舉起來(lái),換做編程語(yǔ)言來(lái)講就是,自己編譯自己。也就是C語(yǔ)言能通過(guò)C語(yǔ)言自己編寫自己的編譯器。
完成自舉通常需要3-4個(gè)步驟。
1、創(chuàng)建自舉編譯器環(huán)境。
2、編譯自舉編譯器。
3、通過(guò)自舉編譯器編譯完整的編譯器。
4、通過(guò)第三步里面的完整的編譯器編譯完整的編譯器。
第四步得到的編譯器就是一個(gè)自舉編譯器。
那么問(wèn)題來(lái)了,第2步中的編譯器是什么語(yǔ)言寫的呢,是這么來(lái)的呢?
這個(gè)就要了解編程語(yǔ)言是什么了,簡(jiǎn)單而言編程語(yǔ)言分為,機(jī)器語(yǔ)言(就是0101),匯編語(yǔ)言(可以理解為機(jī)器語(yǔ)言簡(jiǎn)單英文翻譯),高級(jí)語(yǔ)言(這個(gè)就是我們通常接觸到的編程語(yǔ)言了,細(xì)分的話,還有編譯型的語(yǔ)言和解析型的語(yǔ)言等)。
參考 Dennis M. Ritchie 寫的 The Development of the C Language:Chistory。
Ken Thomson 不滿意 BCPL,于是設(shè)計(jì)了 B 語(yǔ)言,并且用 BCPL 為 B 語(yǔ)言寫了一個(gè)編譯器,然后從這個(gè)編譯器開始自舉寫新的 B 語(yǔ)言編譯器。
貝爾實(shí)驗(yàn)室的眾人在 PDP-7 上用 B 語(yǔ)言寫了各種各樣的東西后又不滿意 B 語(yǔ)言了,于是 1971 年 DMR 開始在新買的 PDP-11 上用 B 給 B 寫擴(kuò)展,稱之為 new B(簡(jiǎn)稱NB),new B和原來(lái)的B語(yǔ)言漸行漸遠(yuǎn),于是就取了BCPL的第二個(gè)字母C當(dāng)作new B的新名字,C語(yǔ)言就這么誕生了。
1973 年夏天他們用手頭的編譯器和語(yǔ)言給 PDP-11 重寫了一個(gè) Unix Kernel。C語(yǔ)言就這樣和unix/linux結(jié)下不解之緣。
對(duì)了,BCPL也是一門能自舉的語(yǔ)言,后來(lái)有些人也用匯編語(yǔ)言寫了C語(yǔ)言的編譯器,并且C語(yǔ)言的語(yǔ)法都是透明公開的,你可以用任何語(yǔ)言實(shí)現(xiàn)C語(yǔ)言的編譯器。
所以答案就變成了,第一版C語(yǔ)言編譯器是由B語(yǔ)言編寫的。現(xiàn)在你可以用任何語(yǔ)言去實(shí)現(xiàn)C語(yǔ)言的編譯器。
最早的計(jì)算機(jī)語(yǔ)言是機(jī)器語(yǔ)言,直接面向計(jì)算機(jī)硬件。雖然指令不多,但實(shí)現(xiàn)特定任務(wù)需要編制復(fù)雜的程序。由于缺乏存儲(chǔ)系統(tǒng),程序存儲(chǔ)于紙帶上。隨著存儲(chǔ)介質(zhì)的發(fā)展和程序模塊化演變,計(jì)算機(jī)語(yǔ)言由低級(jí)向高級(jí)不斷發(fā)展。尤其是視窗操作系統(tǒng)的出現(xiàn),使得計(jì)算機(jī)對(duì)用戶更加友好。
C語(yǔ)言本身是基于英語(yǔ)的。C語(yǔ)言的創(chuàng)始人丹尼斯里奇是美國(guó)人,哈佛大學(xué)畢業(yè)。
比如C語(yǔ)言里的數(shù)據(jù)定義:int出自于integer;比如結(jié)構(gòu)語(yǔ)句:if... else... 等等。
這個(gè)問(wèn)題導(dǎo)致我有一個(gè)問(wèn)題,漢語(yǔ)是什么語(yǔ)言創(chuàng)建的?
只能說(shuō)c語(yǔ)言的運(yùn)行原理是啥,通過(guò)什么能編譯執(zhí)行c語(yǔ)言的命令。所以感覺(jué)這個(gè)問(wèn)題很奇怪
語(yǔ)言就是一套語(yǔ)法規(guī)則,都是用文字寫的,在美國(guó)是用英文寫的,到了中國(guó)翻譯成中文。語(yǔ)言的編譯器才是用計(jì)算機(jī)語(yǔ)言編的。能將C語(yǔ)言源程序翻譯成可執(zhí)行代碼的任何計(jì)算機(jī)語(yǔ)言,都可以用來(lái)編寫C語(yǔ)言編譯器。
10
回答10
回答0
回答2
回答9
回答10
回答0
回答5
回答10
回答6
回答