本身動手寫編譯器、連接器

《本身動手寫編譯器、連接器》前端

編譯原理與技術的一整套理論在整個計算機科學領域佔有至關重要的地位,學習它對程序設計人員有很大的幫助。咱們考究歷史會發現那些人人稱頌的程序設計大師都是編譯領域的高手,像寫出BASIC語言的BILL GATES,SUN的JAVA之父等等,在編譯上都有很深的造詣。曾經在世界首富寶座上穩坐多年的比爾.蓋茨也就是從給微機編寫Basic語言編譯器起家的,也正是這個BASIC編譯器爲比爾·蓋茨和保羅·艾倫的微軟帝國奠基了基礎。正是這個編寫Basic語言編譯器的經歷,開啓蓋茨的輝煌職業生涯。編程

編譯器是一種至關複雜的程序,編寫甚至讀懂這樣的一個程序都非易事,大多數的計算機科學家和專業人員也歷來沒有編寫過一個完整的編譯器。可是,幾乎全部形式的計算都要用到編譯器,並且任何一個與計算機打交道的專業人員都應掌握編譯器的基本結構和操做。除此以外,計算機應用程序中常常遇到的一個任務就是命令解釋程序和界面程序的開發,這比編譯器要小,但使用的倒是相同的技術。所以,掌握這一技術具備很是大的實際意義。後端

中科院計算所所長李國傑院士說:「隨着微處理器技術的飛速發展,處理器性能在很大程度上取決於編譯器的質量,編譯技術成爲計算機的核心技術,地位變得愈來愈重要。我國要發展本身的微處理器事業,必然要有本身的編譯技術做爲後盾。」數組

回過頭來講一說是什麼樣的緣由使我萌生了寫這樣一本文的想法。做者學習其餘計算機課程感受跟看武俠小說沒有什麼太大差異,也沒有感受有特別難懂的,惟獨看編譯原理的的教材,看完了雲裏霧裏的,感受只知其一;不知其二,我感受多是學的教材過於理論化,因而到書店把全部跟編譯原理有關的書籍通通買回了家,固然這也包括你們公認的編譯原理三大經典書籍龍書、 虎書、鯨書龍書在內,每一本我都從頭至尾翻一遍,腦子裏好像什麼都懂了,又感受要真的本身動手寫個編譯器仍然是隻有大師才能完成,對本身仍是可望而不可及的事情。而且全部講述編譯原理的書中幾乎都有這樣一句話:「現有的編譯器都是用Lex,和Yacc構造的,從頭開始手工編寫一個完整的編譯器幾乎是不可能的。」可做者恰恰是那種種明知山有虎,偏向虎山行的人,要知道早期的編譯可都是純手工構造的,苦辣酸甜的征程就此開始,但是寫個什麼語言的編譯器?這個編譯器怎麼定位?這一切都很茫然。性能

我開始研究編譯原理書上的樣例,但願能從中找到靈感,給上述問題找到答案。世界著名計算機科學家N.Worth編寫的「PL/0語言的編譯程序」是做者最早研究的編譯器,它功能簡單、結構清晰、可讀性強,被認爲是一個很是合適的小型編譯程序的學習模型,可做者對這個編譯程序感受不夠過癮,由於它不支持數組,結構體、字符串,而且是以假想的棧式機器爲例來編寫的,而不是直接生成在某種CPU,某種操做系統環境下直接能夠運行的目標語言程序。「PL/0語言的編譯程序」做爲編譯原理教學的教學模型,也只能算「矬子裏面拔將軍」,由於沒有更好的,也只好將就着用了。至此,編譯器定位問題算有了些眉目,做者但願構造一個更適合教學的編譯器。學習

但是,另外一個問題接踵而至,爲何那麼多開源編譯器不能直接用做編譯原理教學模型呢?我開始研究各個開源編譯器的源代碼,其中包括GCC的源代碼,因爲GCC支持多個前端語言,和各類後端機器平臺,AST(abstract Syntax Tree),RTL(Register Transfer Language)又成了繞不過去的坎,咱們還沒學會怎麼編寫針對一種源語言、一種目標機器的編譯器,就要去學習支持多個源語言多個機器平臺的編譯器,就比如一個嬰兒還沒學會走路就要學跑,這注定是要跌跟頭的。操作系統

一面是過於簡化的編譯器教學模型,一面是過於複雜的開源編譯器,做爲教學模型都不太合適。到這裏,編譯器定位問題算是完全想清楚了,做者要構造一個教你們如何本身動手寫編譯器的教學模型。這個模型包括兩大部分,第一部分是語言定義,第二部分是這個語言編譯器的實現, 這個編譯器只支持一種源語言,目標語言也只支持一種。這個語言應該具有目前流行的高級語言的最主要特徵。這個編譯器要結構清晰,代碼量要儘量少,要能體現編寫一個實用的編譯器的完整過程與技術。這個編譯器能生成真正能在操做系統中運行的exe文件,只要雙擊或是在命令行執行就能看到結果的那種。命令行

接下來做者開始思考另外一個問題,編寫什麼語言的編譯器?做者研究了目前最流行的幾種編程序語言C、C++、C#、Objective-C、Java,其中C語言是最簡單的了,只有32個關鍵字,可是做者研究發現,C語言還有許多冗餘的成份,做爲學習模型還能夠更簡單一些。做者最終以C語言爲藍本,進行適當簡化定義了一門新的語言,僅有15個關鍵字,稱之爲SC語言。目標語言選擇你們熟悉的Intel X86機器語言,咱們的編譯器命名爲SCC編譯器。設計

在本書中,讀者將看到從SC語言定義,到SCC編譯器開發的完整過程。讀完後你將知道一門全新的語言如何定義,一個真實的編譯器如何編寫,這些對你來講也將再也不神祕,編譯原理講的理論與本文中講述的SC語言定義及SCC編譯器開發過程,是理論聯繫實際在編譯領域的最好闡釋。開發

相關文章
相關標籤/搜索