任何語言都有開發出來編譯器的可能?
今天在思考一個問題,畢竟學完編譯原理一段時間了,編譯器到底可以由哪種語言開發呢?
我們都知道編譯程序通常分為下面五個階段:
1)詞法分析
2)語法分析
3)語義分析與中間代碼產生
4)優化
5)目標代碼生成
當然最難的一點就是目標代碼的生成,這一階段實現了最終的翻譯,就是真正把原碼翻譯成可以被CPU直接計算的機器碼(NativeCode)。
在網上看了看,有的網友說C語言的第一代編譯器是由B語言寫的,因為C語言畢竟是在B語言的基礎上設計出的一種新語言。
但是B語言由A語言修改而成的語言,當然B語言的編譯器肯定是A語言生成的,那A呢?無窮遞歸,總有一個結束的地方。
那就是匯編語言,匯編語言寫出了第一個簡單的編譯器,然后這個編譯器再生成編譯器,不斷的生成新的編譯器,不斷的拋棄舊編譯器,這樣編譯器就越來越成熟,越來
越好用了。
也就是下面的這句話:
機器生匯編,匯編生A,A生B,B生C,C生萬物。
理論上來講,用什么語言都可以編寫出編譯器,只是效率的問題,因為經過很多步驟的翻譯,都最終翻譯成了機器碼,有的步驟多,效率低,有的步驟少,效率高,當然,我
們現在用的就是效率高的這種。
其實我在想為什么匯編語言生成一個簡單的編譯器后,可以用新生成的編譯器再次生成編譯器,例如,C語言開發C的編譯器呢?
這是一個遞歸的思想,舉個例子一看就明白了
用一個大的模具可以生成一個A模具,A模具可以做出來B模具,依次往下推,最終這個小模具可以做出來小盒子用來裝東西。
第一個大模具肯定是手工做出來的第一個模具,但是有了這個大模具后,后面就可以用他自動的生成更多的模具,后面的各種模具加起來又可以造出來更精致的模具,
所以,自動第一個大模具造出來模具的時候,大模具就可以被拋棄了。