鯨書編譯原理
Ⅰ 如何系統,科學地自學編程知識
事實上要回答你的問題恐怕已經遠遠超出我的能力范疇之外了。因為對於什麼樣的學習才算得上「系統」幾乎是一個哈姆雷特式的問題——人們很難在這一問題上達成一致。
因此拋出答案幾乎只是在引發更多的爭議。所以在討論這個問題的時候,我必須承認下述描述只是我自己的一點小小的體會,只希望能對你有所幫助,這些看法並不「權威」,也不完全「正確」。
一般來說對於計算機科學的學生來說,下述課程是非常關鍵的:
提醒:學習時注意把握合理的深度,不可太浮於表面,也不可太過拘泥於部分細節,對於初學著重掌握基礎內容,能在概念上建立一個合理的認識就可以。真正的學習是在後面的職業生涯中完成的。
一、基礎篇(理論與硬體)
這一部分關注的是計算機的基本理論與基本實現。包括硬體結構理論,以及軟體與硬體的交互。以理論開篇,在機器語言部分深入,最終在操作系統部分達到高潮。
1、計算機實現計算的原理。這包括門電路是如何實現計算的,時序電路是如何實現存儲的,馮諾依曼體系結構是如何將二者結合實現了真正的現實世界的計算機的,以及它是如何反映圖靈機這一理論計算模型的。其間會學習布爾邏輯。
2、如何控制計算機硬體。這部分使用的「工具」就是機器語言和匯編語言。我們需要理解機器語言的本質,以及它如何以「匯編語言」這種更容易理解的形式為程序員提供了控制硬體設備的機會。這部分可以學習到很多非常低級但是本質的內容。
3、操作系統是如何工作的。如果你理解了上一部分的計算機硬體相關的問題,那麼理解操作系統的工作原理將不會那麼困難。另外你將明白操作系統作為硬體和上層軟體的中間層次,是如何大大簡化了人們對硬體的操作過程的。
二、進階篇(軟體系統)
1、編程語言。這包括結構化編程語言以及面向對象編程語言。因為有很多選擇,其實以一門語言開始即可,如果你在前面正確的理解了硬體與機器語言,那麼c語言入門真是太簡單了,如果你運氣不好,覺得C很困難,那麼即使是從Python、Javascript開始學習也沒問題。重點在於理解編程中和語法相關的基本概念,並了解一些簡單的演算法知識。
2、數據結構與演算法。說白了就是如何合理的組織數據,通過其結構特點來簡化編程或者提高計算的效率。這里的內容是模式化的,所有人都需要學習無序結構、有序線性結構、樹結構、圖結構等。另外,排序演算法、查找演算法必須學好,特別是演算法策略如遞推、遞歸、蠻力(窮舉)、分治、動態規劃等也必須有所實踐和了解。切記不必深陷其中,這里是個大坑,你不可能真的「精通」他們。
3、編程語言是如何實現的。這里主要涉及編譯原理。當你站在高級編程語言實現者的角度再來認識編程語言本身的時候,許多問題豁然開朗。這會深刻的改變你的編程觀。可惜的是即使是很好的學生在這里也會遇到很大的阻力。真正的問題不是這方面理論性有多強,而是教材都很爛——包括國外教材(什麼龍書虎書鯨書都根本不是為初學者准備的),而且語焉不詳。這導致大部分人都感覺莫名其妙高深莫測。如果你不是有志攀登軟體設計的最高峰,可以繞行。否則從表達式運算解析開始,逐步引入變數,類型,控制結構,函數,再到對象,一步步構建出解析器,然後結合前面學習的硬體介面知識,將其轉換為低級表示,最後你會發現沒有那麼可怕。
三、基礎領域篇(必備領域知識)
1、互聯網路是如何構成的。這部分包括網路的基本知識,主機間通信的原理,轉發設備的實現,以及互聯網路的構成。這是網路編程所需的基礎知識。除了理解低級協議,也要花一些時間了解應用層的協議,特別是 SMTP、POP3、FTP、HTTP 等,重點是了解他們的基本原理,而不是每個細節。因為每個協議都有自己的標准,光 HTTP 協議就夠你研究 6 個月以上了。這里注重的是原理。
2、如何管理大量的數據並在其上建立信息系統。資料庫是一個很好的例子。包括資料庫系統的基本理論,實現原理,以及設計原則。同樣,這里不是真的在教你如何構建一個資料庫系統,而是在學習他的核心原則,重點是學會如何合理的設計表結構,以及實現效率良好的SQL查詢語句。
四、擴展領域篇(特定領域知識)
1、基於特定平台的軟體開發。如何在Windows平台、Linux平台、Mac OS平台或者手機、平板、電視機、微波爐上完成開發?這需要學習特定的軟體平台提供了哪些編程介面,如何編譯並部署,如何調試和測試等知識。這部分就是軟體工程師職業生涯中最耗費時間的部分。
2、有效的軟體研發是如何實現的。這包括軟體結構的設計知識,軟體實施流程的管理知識,以及一些細微而繁雜的內容。人們通常用軟體工程一詞來概括。但事實上軟體工程站的角度要更高一些,這里只是涵蓋軟體工程的一小部分。
五、科技領域篇(研究性知識)
如果你對人工智慧、科學計算、圖像處理感興趣,這里還有大片的區域等待你探索。
事實上,上面的描述有些嚇人。每一個領域都夠耗盡去很長的時間。不過好消息是大部分知識都只要求在理論上理解。真正的耗費時間的部分還是在與編程、編程、編程。不是每個人都會用到資料庫系統,也不是每個人都需要懂得匯編語言。但是這些背景知識會對你有幫助。讓你不再害怕,對自己更有自信。
如果你希望自己成為一個很棒的開發人員,那麼上述知識都是必須的。但是卻依然遠遠不夠。
學無止境,計算機科學尤其如此。
Ⅱ 分別推薦下以下幾個方面的經典書籍: 1、操作系統 2、數據結構 3、編譯原理 4、演算法 5、資料庫 6、軟體工
操作系統:《操作系統概念》、《現代操作系統》
數據結構:嚴版《數據結構(C語言版)》、《數據結構與演算法分析》(Weiss著,有C/C++/Java描述的不同版本)
編譯原理:傳說中的「龍書」、「虎書」和「鯨書」,全名記不清了可以自己搜一下。
演算法:《演算法導論》、《演算法設計與分析基礎》(Levitin著)
資料庫:《資料庫系統概念》
軟體工程:隨意,反正得多做項目體會……以後可以看看《人月神話》
Ⅲ 求C++ 網路編程最好的書籍 謝謝了
學習編程基礎也很重要的,路要一步一步地走。不要老是想到看一本書就成為高手。我給你推薦一些書吧,你可以選一些看。其中很多都是經典之作。C++是以C為基礎的,所以你最好看一下C語言,網路方面,《計算機網路》和《TCP/IP詳解》是必看的。望採納。
1、演算法
計算機程序設計藝術-------Donald.E.Knuth----------演算法「倚天屠龍」雙劍
演算法導論-----------------Thomas H. Cormen--------演算法「倚天屠龍」雙劍
離散數學及其應用----------Kenneth H.Rosen
具體數學—計算機科學基礎--------Donald.E.Knuth
2、數據結構
數據結構 C++
數據結構演算法與應用
3、C語言
C程序設計語言(第2版·新版)---C語言「倚天屠龍雙劍」---Brian W.Kernighan「C語言之父」
C Primer Plus中文版(第五版)--------C語言「倚天屠龍雙劍」---Stephen Prata
C程序設計(第三版)---------------------------譚浩強
C語言大全(第四版)---------------------------HERBERT SCHILDT
C語言介面與實現:創建可重用軟體的技術-------------DAVID R.HANSON
C語言參考手冊(原書第5版)--------------------------Samuel P.Harbison
C程序設計教程---------------------------------H.M.Deitel/P.J.Deitel
C陷阱與缺陷-----------------------------------Andrew Koenig
5、C++
C++程序設計語言(特別版)---c++八大金剛----Bjarne Stroustrup「C++之父」
C++ Primer (第3版)中文版----c++八大金剛---Stanley B.Lippman
C++ Primer (第4版)中文版----c++八大金剛---Stanley B.Lippman
C++標准程序庫—自修教程與參考手冊--c++八大金剛--Nicolai M.Josuttis
C++語言的設計和演化-----c++八大金剛----Bjarne Stroustrup「C++之父」
深度探索C++對象模型---c++八大金剛----Stanley B.Lippman
Essential C++中文版---c++八大金剛---Stanley B.Lippman
Effective C++中文版 2nd Edition-----c++八大金剛------Scott Meyers
More Effective C++中文版----c++八大金剛------Scott Meyers
C++編程思想(第2版) 第1卷:標准C++導引--------Bruce Eckel
C++編程思想(第2版)第2卷:實用編程技術 --------Bruce Eckel
C++程序設計--------------------------譚浩強
C++ 程序設計教程(第2版)--------------錢能
C++ Primer Plus(第五版)中文版---Stephen Prata
6、操作系統
深入理解計算機系統(修訂版)-------RANDAL E.BRYANT
計算機操作系統(第六版)
7、編譯原理
跟我一起寫makefile
《編譯原理技術和工具》------- Alfred ------- 龍書
《現代編譯原理-C語言描述》 ----------- Andrew W. Appel ----------- 虎書
《高級編譯器設計與實現》 ----------- Steven S.Muchnick ----------- 鯨書
8、網路
計算機網路第四版中文版-----------Andrew S.Tanenbaum -------網路編程三劍客
TCP/IP詳解3卷本--------------------Richard Stevens----網路編程三劍客
UNIX網路編程2卷本--------------------Richard Stevens----網路編程三劍客
用TCP/IP進行網際互聯-----------Douglas E. Comer
高級TCP/IP編程-------------------Jon C. Snader
C++網路編程-----------------------Douglas Schmidt
UNIX環境高級編程(第2版)--------------------Richard Stevens
9、Linux
Linux內核設計與實現
Linux內核完全注釋
LINUX內核分析及編程
Ⅳ 龍書虎書鯨書先看哪一本
龍書。龍書、虎書、鯨則伏叢書是編譯原理的三大聖書,應該先看龍書,因為龍書側重基礎,很詳細,最新版里也加入了很多優化的內容,很好的一本書, 鯨書側重優化部分,是龍廳衡書的升華,虎書側重實踐,大部分孫櫻基礎和優化都講到了。
Ⅳ 再問一條哈,大學計算機系都學些什麼哪裡可以下載到齊全的教材
這些書在文庫或者新浪文庫里應該都能下到。教材的話計算機的書是算出得雜的,以下沒有寫作者名的都是翻譯著作,大部分國內也有英語影印版出售。另外還有考研書,考研書一般比較好懂,內容不深但絕對覆蓋所有的主流知識點。
數據結構/演算法設計,有些學校分兩門課,不過個人認為一本《演算法導論》(機工,第二版,個人更喜歡南大第一版,不過絕版了)足矣,英語有第三版。
程序設計語言的,一般是C入門,國內學校一般是國產教材(比如譚浩強的《C語言程序設計》,清華),國外教材推薦《C Primer Plus》(人郵)
操作系統,《計算機操作系統》(湯子瀛,西電),這本是考研書。《Operating Systems : Design and Implementation》(操作系統設計與實現,機工),《Operating System Concepts》(操作系統概念,高教第七版),為什麼寫英文名是因為操作系統的書翻得都太爛了。
計算機組成原理與體系結構,很多學校開其中一門。《計算機組成原理》(唐朔飛,高教),考研書。《深入理解計算機系統》(機工第二版),《計算機體系結構:量化研究方法》(人郵)
計算機網路,《計算機網路》(謝希仁,電子工業),考研書。經典的國外書就是《TCPIP詳解》三大卷,應該對你太深了。
軟體工程,顯然是超經典的《代碼大全》(不是代碼書)和《人月神話》。
資料庫,《資料庫系統概念》(機工第五版)
編譯原理,《編譯原理技術和工具》(龍書,人郵)《現代編譯原理-C語言描述》(虎書,人郵),三大書中的鯨書比較難就不推薦了。
Ⅵ c語言為什麼能跨平台或者是如何跨平台的
c語言能跨平台是因為各個平台有相應的c編譯器,只要源代碼相同,編譯器編譯出來的二進制文件就會實現相同的功能,但是這些二進制文件本身是不一樣的。
exe就是2進制的,但不完全是原來程序的代碼,還包括了windows系統的一些代碼。
科普一下,C最早是出現在Unix下的,Windows那都是後話了,C出現的時候Windows還沒開發出來呢。
C有個比較特別的稱呼,叫中級語言,因為它有高級語言的特性又能跟底層硬體很好的交互所以才有這么個說法。DOS時代在C裡面嵌上一段匯編直接從並口讀個數上來那是很流行的,現在沒見誰在VC裡面這么干吧。Windows也不讓啊。想訪問硬體怎麼也得通過驅動。
C在多種平台下可以實現代碼級的共享,跨平台就需要重新編譯了。
但是,我也見過有的軟體是可以在多種平台上運行了,可能有什麼特別的技術,可以先識別一下操作系統,再運行相應的代碼。這個應該是在編譯的時候有特殊的技巧。
C編譯、連接器網上有現成的代碼,一般不是很專業的技術人員沒有去研究它。我一直把玩編譯原理的視為天人,有能力把編譯原理那本書看完的就很不容易了,再要能領會其中精要那就成才了,能把龍書虎書鯨書都搞明白的那就是一流專家了。
Ⅶ 誰能介紹一下計算機科學與技術專業
計算機科學與技術專業課程不完全解析
1.計算機導論:
計算機科學的基礎課程之一,其教學目的是概要性地對專業課程作介紹,是典型的面向專業新生的課程(即CS0型課程)。認真學習該課程有助於今後的學習,然而這門課程往往容易被新生們忽略……
(推薦教材:可使用學校配發的教材,但建議使用外版翻譯教材。)
2.高級語言程序設計:
計算機科學的基礎課程之一,教學目的是讓本專業同學實際掌握一門程序設計語言並且習得一些程序設計的基本技能,目前的教學語言是C語言。個人認為課程名稱可改為「高級程序設計語言」,因為課程對語言的強調遠勝於對程序設計本質的講解。建議在學習這門課程時配以《程序設計實踐》一書,效果甚佳。
(推薦教材:
①《從問題到程序——程序設計與C語言引論》 機械工業出版社
②《程序設計實踐》 機械工業出版社
③《程序設計語言——實踐之路》 電子工業出版社 )
3.離散數學:
計算機科學基礎課程之一,被譽為計算機科學的數學基礎。其內容博大精深,從中派生出的圖論(圖演算法)、數理邏輯、組合數學以及泛代數等多門專業課程是現代計算機科學和應用數學的主要研究領域。能否學好離散數學對進一步學習以後的專業課程有著非同一般的影響。
(推薦教材及參考書:
①《離散數學》(第四版) 清華大學出版社
②《離散數學導學》機械工業出版社
③《現代應用數學手冊:離散數學卷》清華大學出版社 )
4.電路與電子技術:
電子產業有「朝陽產業」的美譽,被認為是信息時代的工業。這門電子與電路技術可謂是對電子學領域學習的敲門磚。雖然課程本身對計算機科學專業今後的學習影響不大,但掌握這項技能對於學生本身專業素養地提高是大有裨益的。同時,學習這門課程也能為今後學習數字邏輯和微機原理等系統底層方面的課程打好基礎。
(推薦教材:《電子學基礎:電路和元器件》(第四版)清華大學出版社)
5.面向對象程序設計:
如果說上世紀軟體開發領域最偉大的突破是什麼,面向對象程序設計(OOP)必為其中之一。目前主流的程序設計語言,如C++、Java、Python和Delphi等,幾乎清一色支持面向對象。可以說,掌握的面向對象的精髓,便是掌握了我們這個行業的入門鑰匙。我校此課程的教學語言採用的是C++,而就國內C++教學的糟糕現狀來看,若想完整掌握面向對象思想,學生自己不努力是不行的。
(推薦教材及參考書:
①《C++ Primer中文版》(第四版) 人民郵電出版社
②《Essential C++ 中文版》華中科技大學出版社
③《Effective C++ 中文版》(第三版)電子工業出版社
④《Accelerated C++(影印版)》機械工業出版社
⑤《C++語言的設計與演化》機械工業出版社 )
6.數字邏輯:
計算機科學核心課程之一。計算機科學中有一個研究領域即系統設計領域,而本門課程即為這一領域研究的基礎。正確認識與掌握數字邏輯及其設計,可以使那些有志於系統底層開發的學生獲益匪淺。
(推薦教材:
①《數字基礎(第八版)》清華大學出版社
②《邏輯與計算機設計基礎》 中國電力出版社 )
7.數據結構:
計算機科學核心課程之一。對數據地有效組織是程序的主要任務之一,演算法的主要操作對象亦為數據結構。從簡單的數組和鏈表,到各色高級的抽象數據類型(ADT),數據結構在程序設計中的地位不言而喻。學好數據結構,是進一步學習專業課的基本前提。可以這么說,一個不懂得如何組織和操控數據的學生,根本就不配當我們計算機科學專業的學生,更不配當一名程序員!!!
(推薦教材:
①《C演算法 第一卷(第三版)》人民郵電出版社
②《程序設計抽象思想——C語言描述》清華大學出版社
③《數據抽象與問題求解——C++語言描述(第四版)》清華大學出版社
④《數據結構與演算法——Java語言描述》機械工業出版社 )
8.計算方法:內容不詳,不敢妄作斷言。 (推薦教材:待定)
// 轉帖者:線性代數、微積分、微分方程等的計算機演算法
9.計算機原理與匯編:
系統底層課程之一,亦為計算機科學核心課程。重點講述計算機(微機)構造以及低級語言——匯編語言的基礎知識。學習這門課程,對進一步學習編譯原理等專業高級課程有很大幫助。
(推薦教材:
①《深入理解計算機系統》中國電力出版社
②《Intel匯編語言程序設計(影印版)》清華大學出版社
③《Windows環境下32位匯編語言程序設計(第二版)》電子工業出版社
④《匯編語言編程藝術》清華大學出版社 )
10.操作系統:
計算機科學的核心課程之一。課程全面講述了操作系統的原理與構造,各類上機實驗更能讓學生對操作系統有深刻地理解。
(推薦教材:
①《操作系統(第三版)》機械工業出版社
②《現代操作系統(第二版)》機械工業出版社
③《Linux內核設計與實現(影印版)》機械工業出版社
④《UNIX系統編程》機械工業出版社
⑤《UNIX環境高級編程(第二版)》人民郵電出版社 )
11.軟體工程:
計算機科學的核心課程之一。近年來,隨著軟體開發革命地進一步深化,批判軟體工程及過程方法改進的著作日益豐富,我們也得以從不良的軟體開放中解放。建議在學習本課程時,聯系自己的實戰,並閱讀批判軟體工程和改良軟體工程的著作。
(推薦教材及參考書:
①《軟體工程:實踐者的研究方法(第五版)》機械工業出版社
②《程序設計心理學(銀年紀念版)》清華大學出版社
③《人月神話(銀年紀念版)》清華大學出版社
④《人件》清華大學出版社 )
12.資料庫原理及應用:
計算機科學與信息學科的好像課程之一。課程講述了資料庫原理以及設計等方面的內容。對於那些注重實效的學生而言,學好這門課程,可以使今後的工作更為輕松。
(推薦教材:《資料庫系統概念(第四版)》機械工業出版社)
13.運籌學及其演算法:
此課程課作為計算機科學的輔助課程,向學生介紹了運籌學方面的演算法,此類演算法屬於現代演算法范疇,本人暫時還未涉獵,故恕難對此課程解析之…… (推薦教材:待定)
// 轉帖者:線性規劃、動態規劃、排隊論、決策分析等等
14.計算機網路:
計算機科學的核心課程之一。課程詳細地介紹了計算機網路的發展、組成和協議方面的內容。對於自我要求較高的同學而言,學好這門課程義不容辭!
(推薦教材:
①《計算機網路(第四版)》清華大學出版社
②《TCP/IP協議族》清華大學出版社 )
15.軟體開發管理:
應該是軟體工程課的附屬課程吧,不詳。 (推薦教材:待定)
// 轉帖者:對於工程,管理重於技術
16.數學建模:
可以說是本專業的相關課程,但其意義及作用目前在下還不甚了解。 (推薦教材:待定)
// 轉帖者:既然學了數學,會用也很重要吧
17.J2EE體系結構:
J2EE是目前我們產業的兩大工業平台之一,學習這門課程,可以為今後涉足企業級開發領域打下基礎。但請注意,J2EE和Java語言本身都是在不斷演進的,因而如果不能在課程結束後持續學習相關技術,恐怕還不等你出大學校門,這門課的內容就已經過時了…… (推薦教材:最新的國外相關教材。)
18.計算機圖形學:
計算機科學的核心課程之一。有關計算機圖形學在各個領域的應用不必在下一一說明了吧。無論是游戲開發,還是航空航天等前沿領域,到處都有計算機圖形學的技術被應用。目前該課程主要用C語言和OpenGL圖形庫進行教學,效果應該還算不錯。
(推薦教材及參考書:
①《計算機圖形學原理與實踐-C語言描述(第二版)》機械工業出版社
②《互動式計算機圖形學——基於OpenGL的自頂向下的方法(第四版)》清華大學出版社
③《OpenGL超級寶典(第三版)》 人民郵電出版社 )
19.微型計算機技術:
計算機專業的核心課程之一。課程詳細地分析了微型計算機(主要是單片機)技術,由於這方面資料奇缺,這門課程可不太受在下歡迎…… (推薦教材:待定)
// 轉帖者:想搞嵌入式的要注意了
20.編譯原理:
計算機科學核心課程之一。如果想要寫出好的程序,編譯原理的相關知識必不可少,因而這門課程是十分重點的一門課程。課程教材「龍書」、「虎書」和「鯨書」更是我們專業的經典著作。
(推薦教材:
①《編譯原理》機械工業出版社
②《現代編譯原理——C語言描述》人民郵電出版社
③《高級編譯器設計與實現》機械工業出版社 )
21.Web系統開發:
目前主流的web開發主要集中在ASP.NET和JSP開發領域 ,當然,還有近來火爆異常的Ajax,以前的CGI和ASP已經不那麼流行了。與J2EE一樣,這是一門必須持續學習的課程,否則,你必將被其所拋棄! (推薦教材:最新國外相關書籍。)
22.嵌入式軟體開發:
這個領域可謂是軟體開發的前沿領域,也是未來軟體業霸主的孕育地之一(另兩個領域為Web開發和企業級開發)。目前的軟體開發領域正蘊含著「泛嵌入式」的潛規則(《程序員》2006年7月刊)。認真並持續學習這門課程,對將來的工作會有莫大的幫助。 (推薦教材:《嵌入式系統開放大全》人民郵電出版社)
23.演算法設計與分析:
計算機科學的核心課程之一。「程序是衣,演算法為魂」(《程序員》2006年3月刊),這門課程是本專業學生所亟需掌握的,如果學不好這門課,那麼,你就不是一名優秀的程序員!
(推薦教材:
①《數據結構與演算法分析-C語言描述》機械工業出版社
②《C演算法 第一卷 (第三版)》人民郵電出版社 )
24.情報檢索與利用:這門課我可沒涉獵過…… (推薦教材:待定)
以上純系復制,完全為了幫你!!!!
Ⅷ 什麼經典書很厚
這些書都挺厚~
1、張愛玲:《傾城之戀》
2、馬格利特·杜拉斯:《情人》
3、考林·麥卡洛:《荊棘鳥》
4、村上春樹:《挪威的森林》
5、渡邊淳一:《失樂園》《男人這東西》
6、錢鍾書:《圍城》(婚姻的鏡子)
7、勞倫斯:《虹》《愛戀中的女人》《查太萊夫人的情人》
8、泰戈爾:《飛鳥集》《草葉集》
9、塞林格:《麥田裡的守望者》
10、米蘭·昆德拉:《生命中不能承受之輕》《緩慢》
11、西蒙娜·德·波伏娃:《第二性》
12、雪兒·海蒂:《性學報告》
13、德克旭貝里:《小王子》
14、讓我來成全你的幸福:小仲馬《茶花女》
15、靈魂的哲學與博愛:司湯達《紅與黑》
16、越過愛情,看見春暖花開:簡·奧斯丁《傲慢與偏見》
17、我愛你,與你無關:茨威格《一個陌生女人的來信》
18、這簡直像戲一樣:威廉·莎士比亞《羅密歐與朱麗葉》
19、愛永遠不用說對不起:西格爾《愛情故事》
20、山在那裡,你的心碎了:岩井俊二《情書》
21、充滿暗礁的愛情海洋:加西亞·馬爾克斯《霍亂時期的愛情》
22、愛情終究成了一種傳說:阿蘭·德波頓《愛情筆記》
23、溫柔而堅強:夏洛蒂·勃朗特《簡·愛》
24、粉色的小愛情:堀川波《我就喜歡你這樣的地方》
25、有天堂,但是沒有道路:北村《瑪卓的愛情》
26、美與愛是獨立的:川端康成《雪國》
27、難得糊塗的愛情與婚姻:列夫·托爾斯泰《安娜·卡列尼娜》
28、戰火中成長的美麗與堅強:瑪格麗特·米切爾《飄》
29、用哲學來思考:米蘭·昆德拉《生命中不能承受之輕》
30、奧德修斯式的傳奇:雨果《悲慘世界》
31、二十四小時,路過愛,走過禁區:霍桑《紅字》
32、最殘酷的愛和最不忍的恨:曹禺《雷雨》
33、值得付出一生的等待:帕斯捷爾納克《日瓦戈醫生》
34、喚醒生命的人:海倫·凱勒《假如給我三天光明》
35、只有渺小的人物,沒有渺小的愛情:西奧多·德萊塞《珍妮姑娘》
36、黃葉鋪滿地,我們已不再年輕:路遙《平凡的世界》
37、生得寂寞,死得單調:蕭紅《呼蘭河傳》
38、愛上你的心:雨果《巴黎聖母院》
39、愛和欲的煎熬:福樓拜《包法利夫人》
40、我的成長與戰爭共呼吸:安妮·弗蘭克《安妮日記》
41、沉重的枷鎖:張愛玲《金鎖記》
42、在自我面前懺悔吧:列夫·托爾斯泰《復活》
43、片刻的浮華盛世:莫泊桑《項鏈》
44、戰爭,讓女人走開:瓦西里耶夫《這里的黎明靜悄悄》
45、包容的愛還是徹底的恨:艾米莉·勃朗特《呼嘯山莊》
46、從「黑暗意識」中蘇醒:翟永明《女人》
47、溶解心靈的秘密:舒婷《舒婷詩集》
48、愛,我們曾共同擁有:葉芝《當你老了》
49、你最美的氣質是自由:惠特曼《草葉集》
50、此幸福,彼幸福:楊絳《我們仨》
51、成長是目的,愛情是過程:張小嫻《麵包樹上的女人》
52、用另一個角度來看婚嫻:老舍《離婚》
53、一個女人的城市傳奇:王安憶《長恨歌》
54、愛情與食物的辯證關系:徐坤《廚房》
55、勇敢地被啟蒙:高爾基《母親》
56、跳來跳去,你跳得出生活嗎:契訶夫《跳來跳去的女人》
57、棘心天天,母親辛勞:蘇雪林《棘心》
58、有時候,錢也是安全感:亦舒《喜寶》
59、一切只是私人生活:陳染《私人生活》
60、讓它變成事實吧:王小波《黃金時代》(勵志書籍)
Ⅸ 學習編譯原理哪本書好
我們學校用的是《編譯原理》與《編譯原理與實踐》這兩本書,這兩本書都是國外的教材。我覺得《編譯原理與實踐》這本書不錯,自學應該能看懂,而且代碼比較多,書最後還有整個小型編譯器的源代碼。
編譯不好學,你就慢慢學吧。
下面的資料請作參考:
當代編譯技術三大聖經級別的教材
1.龍書(Dragon book)
書名是Compilers: Principles,Techniques,and Tools
作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
內容簡介
《編譯原理》作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界著名的計算機 科學家,他們在計算機科學理論、資料庫等很多領域都做出了傑出貢獻。《編譯原理》 是編譯領域無可替代的經典著作,被廣大計算機專業人士譽為「龍書」。《編譯原理》一 直被世界各地的著名高等院校和科研機構(如貝爾實驗室、哥倫比亞大學、普 林斯頓大學和斯坦福大學等)廣泛用作本科生和研究生編譯原理與技術課程的 教材,《編譯原理》對我國計算機教育界也具有重大影響。 書中深入討論了編譯器設計的重要主題,包括詞法分析、語法分析、語法制 導分析、類型檢查、運行環境、中間代碼生成、代碼生成、代碼優化等,並在 最後兩章中討論了實現編譯器的一些編程問題和幾個編譯器實例,而且每章都 提供了大量的練習和參考文獻。
與上一版相比,《編譯原理》第二版進行了全面的修訂,涵蓋了編譯器開發方面的最新進展。每章中都提供了大量的系統及參考文獻。《編譯原理》是編譯原理課程方面的經典教材,內容豐富,適合作為高等院校計算機及相關專業本科生及研究生的編譯原理課程的教材,也是廣大技術人員的極佳參考讀物。
作者簡介
Alfred V.Aho,美國歌倫比亞大學教授,美國國家工程院院士,ACM和IEEE會士,曾獲得IEEE的馮·諾伊曼獎。著有多部演算法、數據結構、編譯器、資料庫系統及計算機科學基礎方面的著作。
Monica S.Lam,斯坦福大學計算機科學系教授,曾任Tensilica的首席科學家,也是Moka5的首任CEO。曾經主持SUIF項目,該項目產生了最流行的研究用編譯器之一。
Ravi Sethi,Avaya實驗室總裁,曾任貝爾實驗室高級副總裁TLucent Technologies通信軟體的CTO。他曾在賓夕法尼亞州立大學、亞利桑那州立大學和普林斯頓大學任教,是ACM會士。
Jeffrey D.Ullman斯坦福大學計算機科學系教授和Gradiance CEO,他的研究興趣包括資料庫理論、資料庫集成、數據挖掘和利用信息基礎設施教學等。他是美國國家工程院院士、IEEE會士,獲得過ACM的KarIstrom傑出教育家獎和Knuth獎。
第一版中文版
第二版中文版
2.鯨書(Whale book)
書名是:Advanced Compiler Design and Implementation
作者是:Steven S.Muchnick
內容簡介
本書迎接現代語言和體系結構的挑戰,幫助讀者作好准備,去應對將來要遇到的編譯器設計的問題。
本書涵蓋現代微處理器編譯器的設計和實現方面的所有高級主題。本書從編譯設計基礎領域中的高級問題開始,廣泛而深入地闡述各種重要的代碼優化技術,分析各種優化之間的相對重要關系,以及實現這些優化的最有效方法。
本書特點
●為理解高級編譯器設計的主要問題奠定了基礎
●深入闡述優化問題
●用Sun的SPARC、IBM的POWER和PowerPC、DEC的Alpha以及Intel的Pentium和相關商業編譯 器作為案例,說明編譯器結構、中間代碼設計和各種優化方法
●給出大量定義清晰的關於代碼生成、優化和其他問題的演算法
●介紹由作者設計的以清晰、簡潔的方式描述演算法的語言ICAN (非形式編譯演算法表示)。
本書是經典的編譯器著作,與「龍書」齊名,稱為鯨書。書中針對現代語言和體系結構全面介紹了編譯器設計與實現的高級論題,從編譯器的基礎領域中的高級問題開始,然後深入討論了各種重要的代碼優化。本書專為編譯器專業人士和計算機專業本科生,研究生編寫,在設計和實現高度優化的編譯器以及確定優化的重要性和實現優化的最有效的方法等方面,為讀者提供了非常有價值的指導。
作者簡介
Steven S.Muchnick,曾是計算機科學教授,後作為惠普的PA-RISC和SUN的SPARC兩種計算機體系結構的核心開發成員,將自己的知識和經驗應用於編譯器設計,並擔任這些系統的高級編譯器設計與實現小組的領導人。他在研究和開發方面的雙重經驗,對於指導讀者作出編譯器設計決策極具價值。
3.虎書(Tiger book)
書名是:Modern Compiler Implementation in C /Java /ML,Second Edition
作者是:Andrew W.Appel,with Jens Palsberg
內容簡介
《現代編譯原理——C語言描述(英文版)/圖靈原版計算機科學系列》全面講述了現代編譯器的各個組成部分,包括:詞法分析、語法分析、抽象語法、語義檢查、中間代碼表示、指令選擇、數據流分析、寄存器分配以及運行時系統等。與大多數編譯原理的教材不同,《現代編譯原理——C語言描述(英文版)/圖靈原版計算機科學系列》採用了函數語言和面向對象語言來描述代碼生成和寄存器分配,對於編譯器中各個模塊之間的介面都給出了實際的 C 語言頭文件。 全書分成兩部分,第一部分是編譯的基礎知識,適用於第一門編譯原理課程(一個學期);第二部分是高級主題,包括面向對象語言和函數語言、垃圾收集、循環優化、 SSA(靜態單賦值)形式、循環調度、存儲結構優化等。
本書是一本著名的編譯原理課程的教材。國際上眾多名校均採用本書作為編譯原理課程的教材,包括美國麻省理工學院、加州大學伯克利分校、普林斯頓大學和英國劍橋大學等。本書在國外享有「虎書」的稱號,與有「龍書」之稱的《編譯原理》(Alfred Aho 等編著)齊名。與編譯原理方面的其他名著相比,本書出版時間晚,內容新。 書中專門為學生提供了一個用 C 語言編寫的實習項目,包括前端和後端設計,學生可以在一學期內創建一個功能完整的編譯器。
作者簡介
Andrew W.Appel,美國普林斯頓大學計算機科學系教授,第26屆ACM SIGPLAN-SIGACT程序設計原理年會大會執行主席,1998-1999年在貝爾實驗室做研究工作。主要研究方向是計算機安全、編譯器設計、程序設計語言等。
Ⅹ 編譯器龍書虎書鯨書基本抽象概念
在編譯原理的世界裡,三本堪稱經典的著作猶如璀璨明珠:龍書(Aho, Sethi, Ullman合著的《編譯原理技術和工具》)、虎書(Appel和Palsberg合作的《現代編譯器實現:C語言版》),以及被稱為「鯨書」的神秘巨著(未提及具體書名)。龍書是編譯器領域的基石,涵蓋了詞法分析、語法分析等核心內容,雖早期版本存在一些過時技術,但後期修訂版不斷擴展新知識。虎書則緊跟時代步伐,融合了數據流分析等現代元素,特別適合教學,不僅有C語言版本,還有Java和ML版本,詳細內容可通過參考鏈接獲取。
深入研究現代商業編譯器的關鍵問題,學生們通過學習基礎概念,為後續深入探索奠定基礎。推薦必讀的《現代編譯原理:C語言描述》由Steven S. Muchnick撰寫,是虎書的升級版。而「鯨書」則為進階學習者量身打造,探討高級編譯器設計與實現,涵蓋了抽象層次的深入轉換,如從高級語言到機器代碼的優化過程,分為基礎抽象、數據模型、編程語言語義和演算法效率等幾個核心領域。
基礎抽象如同Java介面,它不僅包含操作的名稱,還承載了預期的功能含義。這些抽象可以分為兩類:一類是常見的操作,如字典和堆棧,提供多種實現;另一類是廣泛應用於組件化的概念,如樹和圖。在計算思維中,抽象是靈魂,如圖抽象中的「查找相鄰節點」,它在圖靈完備的語言中嵌入,類似於面向對象的類方法,但底層實現則更為具體,涉及有限自動機、解析器等與機器模型緊密相連的技術。聲明性抽象,如正則表達式和關系代數,強調的是表達和描述而非實現,對優化性能有高要求;而計算抽象,如通用編程語言和理論模型,如RAM和並行計算模型,盡管可能非圖靈完備,但其重要性不言而喻。
舉例來說,當需要在聲明階段將標識符插入符號表S時,編譯器會根據標識符類型進行檢索。字典語言雖然不具備圖靈機的復雜性,但它關注的是進程的表示,而非演算法設計。字典操作的時間復雜性與集合大小相關,鏈表實現可能導致O(n)時間,而搜索樹如AVL或紅黑樹則可達到O(log n)。
哈希抽象的核心是全集、哈希函數和哈希桶,操作基於計算哈希值。盡管哈希操作存在最壞情況性能問題,但通常假設平均性能。哈希桶存儲結構可根據集合規模採用鏈表或優化存儲,如調整磁碟塊大小以適應主存容量。
從詞法分析到後端優化,現代編譯器分為前後端任務。前端涉及詞法分析、句法分析、語義分析和中間代碼生成,而共享符號表則用於收集源代碼信息。如Lex,通過正則表達式實現標記簡化,早期的磁帶檢索技術效率較低,但Aho-Corasick演算法通過一次遍歷查找多個關鍵字,提高了效率。句法分析器生成器基於正則表達式,產生確定性有限自動機,確保語法的有效性。
2.1.1 Lex的升級:Aho-Corasick演算法通過集成多個正則表達式集合,顯著提升了關鍵字檢索的效率。
2.1.2 Lex設計關注交互復雜性,區分標識符與控制流關鍵字,避免混淆。
2.1.3 懶惰評估的DFA(確定性有限自動機)技術,優化了正則表達式到DFA的轉換,為grep等工具的性能提升做出了貢獻。
繼續深入,語法分析構建了語言的結構,如表達式樹。上下文無關文法(CFG)描述編程語言的句法規則,LR(k)分析法通過一次左到右掃描,處理復雜語法結構。
編譯器研究涉及眾多抽象層次,從關系模型在編程語言中的應用,到SQL的抽象和優化,再到分布式計算和量子計算的前沿探索。隨著技術的演進,我們期待在編譯器領域的知識體系中,不斷發掘新的抽象理論,推動計算機科學的邊界不斷拓寬。
參考資料:[1] [2] [3]