導航:首頁 > 源碼編譯 > 編譯原理三大聖書之前看什麼書

編譯原理三大聖書之前看什麼書

發布時間:2023-03-01 07:51:40

編譯原理自學要看哪本書好

我們學校用的是《編譯原理》與《編譯原理與實踐》這兩本書,這兩本書都是國外的教材。我覺得《編譯原理與實踐》這本書不錯,自學應該能看懂,而且代碼比較多,書最後還有整個小型編譯器的源代碼。 編譯不好學,你就慢慢學吧

② 想學IT應該買什麼書看

首先,我覺得你需要明確自己的發展方向,你想學習的課程起碼串聯起來是個完整的體系,以後能夠幫助你就業

書籍整理如下:

C++開發

1.《C++ Primer》:全面學習C++的必備書籍

2.《Thinking in C++》:了解C++背後的一些機制

3.《深度探索C++對象模型》:深入了解C++,也是學習COM的必經之路

Windows平台

入門

1.《Windows程序設計》:這本書主要講的是Windows API的使用,是Windows編程入門書籍。上冊涉及到的知識基本上就夠用了,時間不充裕的話閱讀上冊即可。

2.《Win32多線程程序設計》:Windows下多線程編程必備

3.《Windows核心編程》:Window平台基礎知識:消息機制,內存管理,多線程,動態鏈接庫等

4.《Windows網路編程》:介紹Windows下各種網路協議的開發和並發處理模型。

進階

1.《深入淺出MFC》:Windows下編程,MFC雖然有些過時,但其機制還是有學習的價值。重點學習書中提到的MFC 6大機制

2.《COM本質論》:COM是Windows構建用戶態的重要技術之一,Windows開發必修課,本書對COM的設計動機作了深入闡述

3.《深入解析ATL》:ATL全名Active Templete Library,是用C++的模版封裝了COM,這本書主要講的是對源碼分析

4.《WTL White Paper》:WTL源自微軟,基於ATL的一套開源模版庫,主要用於界面編程和工具類的使用

5.《代碼大全》:這邊書主要講的是工程編碼規范

高級

1.《深入解析Windows操作系統》:Windows大牛書籍,講的主要是Windows操作系統的內核原理

調試技術

1.《軟體調試》

2.《Windows高級調試》

3.《windows用戶態程序高效排錯》

Linux平台

Linux內核

1.《Linux Kernel Development》/《Linux內核設計與實現》:Robert Love的著作,不厚的一本書,深入淺出地將Linux內核娓娓道來

Linux使用和Shell編程

1.《sed & awk》/《sed與awk》:sed與awk都是Linux下常用的日誌分析利器

Linux編程

1.《Beginning Linux Programming》/《Linux程序設計》:老牌的Linux編程入門書

2.《Advanced Programming in the Unix Environment》/《Unix環境高級編程》:對Unix編程環境做了細致的總結,涵蓋了進程間通訊、網路通訊、文件系統等各方面的知識

網路編程

1.《TCP/IP Illustrated, Volume I》/《TCP/IP詳解,卷一》:對理解TCP/IP協議的設計理念和協議細節有顯著的幫助。

2.《Unix Network Programming》/《Unix網路編程》,卷一、卷二:網路編程方面難以逾越的著作,事無巨細、深入淺出,強烈推薦

對這些書目抱有100%的信心,全部掌握,融會貫通,即可打通奇經八脈,天下無雙。

對了,你沒有基礎最好從c與c++基礎開始。找些基礎書開始看。

[C語言入門經典(第四版)].(美)霍頓.掃描版,《C++ Primer》就不錯。

③ 編譯原理「龍書」「虎書」「鯨書」的書名是什麼

1.龍書(Dragon book) 書名是Compilers: Principles,Techniques,and Tools 2.鯨書(Whale book) 書名是:Advanced Compiler Design and Implementation 3.虎書(Tiger book) 書名是:Modern Compiler Implementation in java/C++/ML,Second Edition

④ 有沒有比龍書通俗易懂的編譯原理書籍

大學課程為什麼要開設編譯原理呢?這門課程關注的是編譯器方面的產生原理和技術問題,似乎和計算機的基礎領域不沾邊,可是編譯原理卻一直作為大學本科的必修課程,同時也成為了研究生入學考試的必考內容。編譯原理及技術從本質上來講就是一個演算法問題而已,當然由於這個問題十分復雜,其解決演算法也相對復雜。我們學的數據結構與演算法分析也是講演算法的,不過講的基礎演算法,換句話說講的是演算法導論,而編譯原理這門課程講的就是比較專註解決一種的演算法了。在20世紀50年代,編譯器的編寫一直被認為是十分困難的事情,第一Fortran的編譯器據說花了18年的時間才完成。在人們嘗試編寫編譯器的同時,誕生了許多跟編譯相關的理論和技術,而這些理論和技術比一個實際的編譯器本身價值更大。就猶如數學家們在解決著名的哥德巴赫猜想一樣,雖然沒有最終解決問題,但是其間誕生不少名著的相關數論。
推薦參考書
雖然編譯理論發展到今天,已經有了比較成熟的部分,但是作為一個大學生來說,要自己寫出一個像TurbocC,Java那樣的編譯器來說還是太難了。不僅寫編譯器困難,學習編譯原理這門課程也比較困難。
第一本書的原名叫《CompilersPrinciples,Techniques,andTools》,另外一個響亮的名字就是龍書。原因是這本書的封面上有條紅色的龍,也因為獗臼樵詒嘁朐?砘?嘴域確實?忻?所以很多國外的學者都直接取名為龍書。最近機械工業出版社已經出版了此書的中文版,名字就叫《編譯原理》。該書出的比較早,大概是在85或86年編寫完成的,作者之一還是著名的貝爾實驗室的科學家。裡面講解的核心編譯原理至今都沒有變過,所以一直到今天,它的價值都非凡。這本書最大的特點就是一開始就通過一個實際的小例子,把編譯原理的大致內容羅列出來,讓很多編譯原理的初學者很快心裡有了個底,也知道為什麼會有這些理論,怎麼運用這些理論。而這一點是我感覺國內的教材缺乏的東西,所以國內的教材都不是寫給願意自學的讀者,總之讓人看了半天,卻不知道裡面的東西有什麼用。
第二本書的原名叫《ModernCompilerDesign》,中文名字叫做《現代編譯程序設計》。該書由人民郵電出版社所出。此書比較關注的是編譯原理的實踐,書中給出了不少的實際程序代碼,還有很多實際的編譯技術問題等等。此書另外一個特點就是其現代而字。在傳統的編譯原理教材中,你是不可能看到如同Java中的垃圾回收等演算法的。因為Java這樣的解釋執行語言是在近幾年才流行起來的東西。如果你想深入學習編譯原理的理論知識,那麼你肯定得看前面那本龍書,如果你想自己動手做一個先進的編譯器,那麼你得看這本《現代編譯程序設計》。
第三本書就是很多國內的編譯原理學者都推薦的那本《編譯原理及實踐》。或許是這本書引入國內比較早吧,我記得我是在高中就買了這本書,不過也是在前段時間才把整本書看完。此書作為入門教程也的確是個不錯的選擇。書中給出的編譯原理講解也相當細致,雖然不如前面的龍書那麼深入,但是很多地方都是點到為止,作為大學本科教學已經是十分深入了。該書的特點就是注重實踐,不過感覺還不如前面那本《現代編譯程序設計》的實踐味道更重。此書的重點還是在原理上的實踐,而非前面那本那樣的技術實踐。《編譯原理及實踐》在講解編譯原理的各個部分的同時,也在逐步實踐一個現代的編譯器TinyC.等你把整本書看完,差不多自己也可以寫一個TinyC了。作者還對Lex和Yacc這兩個常用的編譯相關的工具進行了很詳細的說明,這一點也是很難在國內的教材中看到的。
推薦了這三本教材,都有英文版和中文版的。很多英文好的同學只喜歡看原版的書,不我的感覺是這三本書的翻譯都很不錯,沒有必要特別去買英文版的。理解理論的實質比理解表面的文字更為重要。
編譯原理的實質
幾乎每本編譯原理的教材都是分成詞法分析,語法分析(LL演算法,遞歸下降演算法,LR演算法),語義分析,運行時環境,中間代碼,代碼生成,代碼優化這些部分。其實現在很多編譯原理的教材都是按照85,86出版的那本龍書來安排教學內容的,所以那本龍書的內容格式幾乎成了現在編譯原理教材的定式,包括國內的教材也是如此。一般來說,大學裡面的本科教學是不可能把上面的所有部分都認真講完的,而是比較偏重於前面幾個部分。像代碼優化那部分東西,就像個無底洞一樣,如果要認真講,就是單獨開一個學期的課也不可能講得清楚。所以,一般對於本科生,對詞法分析和語法分析掌握要求就相對要高一點了。
詞法分析相對來說比較簡單。可能是詞法分析程序本身實現起來很簡單吧,很多沒有學過編譯原理的人也同樣可以寫出各種各樣的詞法分析程序。不過編譯原理在講解詞法分析的時候,重點把正則表達式和自動機原理加了進來,然後以一種十分標準的方式來講解詞法分析程序的產生。這樣的做法道理很明顯,就是要讓詞法分析從程序上升到理論的地步。
語法分析部分就比較麻煩一點了。現在一般有兩種語法分析演算法,LL自頂向下演算法和LR自底向上演算法。LL演算法還好說,到了LR演算法的時候,困難就來了。很多自學編譯原理的都是遇到LR演算法的理解成問題後就放棄了自學。其實這些東西都是只要大家理解就可以了,又不是像詞法分析那樣非得自己寫出來才算真正的會。像LR演算法的語法分析器,一般都是用工具Yacc來生成,實踐中完全沒有比較自己來實現。對於LL演算法中特殊的遞歸下降演算法,因為其實踐十分簡單,那麼就應該要求每個學生都能自己寫。當然,現在也有不少好的LL演算法的語法分析器,不過要是換在非C平台,比如Java,Delphi,你不能運用YACC工具了,那麼你就只有自己來寫語法分析器。
等學到詞法分析和語法分析時候,你可能會出現這樣的疑問:詞法分析和語法分析到底有什麼?就從編譯器的角度來講,編譯器需要把程序員寫的源程序轉換成一種方便處理的數據結構(抽象語法樹或語法樹),那麼這個轉換的過程就是通過詞法分析和語法分析的。其實詞法分析並非一開始就被列入編譯器的必備部分,只是我們為了簡化語法分析的過程,就把詞法分析這種繁瑣的工作單獨提取出來,就成了現在的詞法分析部分。除了編譯器部分,在其它地方,詞法分析和語法分析也是有用的。比如我們在DOS,Unix,Linux下輸入命令的時候,程序如何分析你輸入的命令形式,這也是簡單的應用。總之,這兩部分的工作就是把不規則的文本信息轉換成一種比較好分析好處理的數據結構。那麼為什麼編譯原理的教程都最終把要分析的源分析轉換成樹這種數據結構呢?數據結構中有Stack,Line,List這么多數據結構,各自都有各自的特點。但是Tree這種結構有很強的遞歸性,也就是說我們可以把Tree的任何結點Node提取出來後,它依舊是一顆完整的Tree。這一點符合我們現在編譯原理分析的形式語言,比如我們在函數裡面使用函樹,循環中使用循環,條件中使用條件等等,那麼就可以很直觀地表示在Tree這種數據結構上。同樣,我們在執行形式語言的程序的時候也是如此的遞歸性。在編譯原理後面的代碼生成的部分,就會介紹一種堆棧式的中間代碼,我們可以根據分析出來的抽象語法樹,很容易,很機械地運用遞歸遍歷抽象語法樹就可以生成這種指令代碼。而這種代碼其實也被廣泛運用在其它的解釋型語言中。像現在流行的Java,.NET,其底層的位元組碼bytecode,可以說就是這中基於堆棧的指令代碼的。
關於語義分析,語法制導翻譯,類型檢查等等部分,其實都是一種完善前面得到的抽象語法樹的過程。比如說,我們寫C語言程序的時候,都知道,如果把一個浮點數直接賦值給一個整數,就會出現類型不匹配,那麼C語言的編譯器是怎麼知道的呢?就是通過這一步的類型檢查。像C++語言這中支持多態函數的語言,這部分要處理的問題就更多更復雜了。大部編譯原理的教材在這部分都是講解一些比較好的處理策略而已。因為新的問題總是在發生,舊的辦法不見得足夠解決。
本來說,作為一個編譯器,起作用的部分就是用戶輸入的源程序到最終的代碼生成。但是在講解最終代碼生成的時候,又不得不講解機器運行環境等內容。因為如果你不知道機器是怎麼執行最終代碼的,那麼你當然無法知道如何生成合適的最終代碼。這部分內容我自我感覺其意義甚至超過了編譯原理本身。因為它會把一個計算機的程序的運行過程都通通排在你面前,你將來可能不會從事編譯器的開發工作,但是只要是和計算機軟體開發相關的領域,都會涉及到程序的執行過程。運行時環境的講解會讓你更清楚一個計算機程序是怎麼存儲,怎麼裝載,怎麼執行的。關於部分的內容,我強烈建議大家看看龍書上的講解,作者從最基本的存儲組織,存儲分配策略,非局部名字的訪問,參數傳遞,符號表到動態存儲分配(malloc,new)都作了十分詳細的說明。這些東西都是我們編寫平常程序的時候經常要做的事情,但是我們卻少去探求其內部是如何完成。
關於中間代碼生成,代碼生成,代碼優化部分的內容就實在不好說了。國內很多教材到了這部分都會很簡單地走馬觀花講過去,學生聽了也只是作為了解,不知道如何運用。不過這部分內容的東西如果要認真講,單獨開一學期的課程都講不完。在《編譯原理及實踐》的書上,對於這部分的講解就恰到好處。作者主要講解的還是一種以堆棧為基礎的指令代碼,十分通俗易懂,讓人看了後,很容易模仿,自己下來後就可以寫自己的代碼生成。當然,對於其它代碼生成技術,代碼優化技術的講解就十分簡單了。如果要仔細研究代碼生成技術,其實另外還有本叫做《》,那本書現在由機械工業出版社引進的,十分厚重,而且是英文原版。不過這本書我沒有把它列為推薦書給大家,畢竟能把龍書的內容搞清楚,在中國已經就算很不錯的高手了,到那個時候再看這本《》也不遲。代碼優化部分在大學本科教學中還是一個不太重要的部分,就是算是實踐過程中,相信大家也不太運用得到。畢竟,自己做的編譯器能正確生成執行代碼已經很不錯了,還談什麼優化呢?
編譯原理的課程畢竟還只是講解原理的課程,不是專門的編譯技術課程。這兩門課程是有很大的區別的。編譯技術更關注實際的編寫編譯器過程中運用到的技術,而原理的課

⑤ 學編譯原理之前必須學匯編原理嗎

樓主理解有點錯誤,匯編語言基本就跟機器語言對等了,,理解怎麼從高級語言到匯編語言基本就懂編譯原理了 ,建議學一門匯編語言。

⑥ 學習java需要學哪些 看什麼書

學習java需要學習的技術知識還是比較多的,包括:java基礎語法、面向對象、javase、資料庫技術、web前端、java開發框架、企業項目實戰等。想要學好這些技術,就需要我們不斷的努力才能夠完全掌握。至於看不看書這個可以根據大家自己的需求去了解該看一些什麼樣類型的書籍。

現在市面上的java學習資料很多,如果是想要快速完成學習找工作的可以去網路上找一些相關的視頻資料進行學習,或者是去報名java培訓班進行學習,看視頻學習或者是老師帶領學習的話更容易理解,這樣學習的效率相對看書來說是比較快一些。

java入門學習的話、大家可以看看下邊的這些書。

《Java核心技術(第10版)》

提起Java入門必讀,四大名著是少不了的。《Java 核心技術》就是其中之一,分卷一、卷二兩冊,卷一講基礎,卷二為進階。全書對於Java語言的核心概念、語法、重要特性和開發方法講解得非常細致,可以說是一部有關Java的網路全書。


⑦ 學習編譯原理之前需要學哪些知識

1.你要學到什麼水平?是想考試考好還是想實際寫出來一個足夠強度的編譯器?如果是前者,就一句:努力當學霸才是你唯一的出路。
2.對於scanner &parser的話,對於書上所講的演算法的要求是很高的,有很大的依賴性,所以必須理解透徹,即使沒有機會實現也要自己動手畫畫。同時這也是本科階段所學的編譯原理的所有內容。雖然flex和bison很好使,但是強烈不建議使用。
3.對於生成器、連接器或者解釋器的話,那麼你要了解匯編語言、微處理器、微機介面等計算機基礎學科。簡單的說就是從底層學到高級語言的層面。這個要求是很高的,畢竟涉及到二進制代碼優化等很麻煩的。

⑧ 軟體開發初學者應該看什麼書

學習軟體開發都需要看《c和指針》、《c缺陷和陷阱》、《c專家編程》,這三本書是一個初級C程序員必看的三本書,同時也是應屆新員工必須好好學習的教材,非常適合剛畢業的大學生學習 。
另外還有:
C++語言提升:
《Effective C++:改善程序與設計的55個具體做法》
《More Effective C++:35個改善編程與設計的有效方法(中文版)》
《C++沉思錄》
《C++Templates中文版》
《深度探索 C++ 對象模型》
《泛型編程與STL》
一個由C轉向C++的程序員,從來沒有系統的學習過C++的語法,往往是用到的什麼學習什麼。如果要系統入門,《C++ primer》倒是不錯。
設計類《代碼大全》:
《重構-改善既有代碼的設計》
《代碼整潔之道》
《實現模式》
《程序員應該知道的97件事》
這幾本書一般講的是函數以及更低層次的設計。《代碼大全》完完整整的讀完過,而且做了很多的筆記,獲益良多。《重構》就不必說了,其他幾本書前面大致看了一下,也非常不錯,計劃有時間要好好學習一下。
架構:
《軟體體系結構的藝術》
《領域驅動設計:軟體核心復雜性應對之道》
《軟體架構師應該知道的97件事》
《企業應用架構模式》
《面向模式的軟體體系結構卷1:模式系統》
《軟體架構設計》
《架構師需要知道的97件事》
敏捷開發:
《測試驅動開發》
《敏捷軟體開發——原則、模式與實踐》
《Scrum敏捷項目管理》
《硝煙中的Scrum和XP——我們如何實施Scrum》
《敏捷軟體開發》

閱讀全文

與編譯原理三大聖書之前看什麼書相關的資料

熱點內容
伺服器如何搭建多個節點 瀏覽:324
acx演算法 瀏覽:256
幽冥詭匠漫畫全集用什麼app可以看 瀏覽:1001
租用伺服器為什麼越來越慢 瀏覽:960
演算法創新就業方向 瀏覽:423
演算法最優解作者 瀏覽:867
通達信紅綠寶塔線指標源碼 瀏覽:666
app是什麼東西合法嗎 瀏覽:231
怎麼鎖app視頻教程 瀏覽:841
迅捷pdf注冊碼生成器 瀏覽:748
androidsdkosx 瀏覽:302
壓縮面膜紙熒光 瀏覽:841
app怎麼分身三個 瀏覽:744
電影bt下載源碼 瀏覽:421
iwatch屏幕加密晶元 瀏覽:570
公安主題網站源碼 瀏覽:986
天津市伺服器供應商雲伺服器 瀏覽:115
數控車床子程序編程 瀏覽:111
floydwarshall演算法 瀏覽:718
丟失微信app怎麼找 瀏覽:252