當前位置:首頁 » 編程軟體 » 有關cr編譯器的使用方法的書籍

有關cr編譯器的使用方法的書籍

發布時間: 2022-07-14 02:35:54

⑴ 能不能推薦一些c語言面向對象編程的書籍。。 關鍵就是c語言如何實現面向對象的思想的書籍。。

你學過javaScript你就感覺as很簡單的,他們很相似的。我是學動漫的,首先我們的課是先學JavaScript然後我感覺學as是真的很簡單的。ActionScript 動作腳本是遵循 ECMAscript第四版 的 Adobe Flash Player 運行時環境的編程語言。它在 Flash 內容和應用程序中實現交互性、數據處理以及其他功能。

ActionScript是Flash的腳本語言,與JavaScript相似,ActionScript是一種面向對象編程語言。

呵呵
你看一下面的幾個問答吧
問:我最近想去學flash製作,在網上找了找,發現有很多製作軟體,如flash MX,flash MX2004和flash cs3 Pro,哪款比較好啊?

答:

2000年 flash 5.0

2002年 flash mx (就是flash 6.0)

2004年 flash mx2004 (就是flash 7.0)

2005年 flash 8.0

2006年 flash cs3 (就是flash 9.0)

2008年 flash cs4 (就是flash 10.0)

目前的最新版本是flash cs4 功能非常強大,不僅支持骨骼動畫,還支持3維等等,verycd上有視頻教程,可以去學習一下。

不過初學的話,個人建議你從flash cs3開始,以便今後玩flash cs4,因為他們的操作性很相似,Flash 8現在雖然還是很多人在用,但是已經漸漸被新軟體的新功能所取代。

FLASH CS3的好用之處::

1.cs3是ADOBE收購micromedia後的大作,無論從動畫設計上,還是程序語言上都有質的飛躍。比如鋼筆功能更加強大,超級強大的繪圖功能,這些都讓矢量圖製作者提高了效率,使用更方便。

2.FLASH CS3引入了面向對象的AS3語言,使得AS不在是一個簡簡單單的腳本語言,而搖身變成一種強大的高級程序語言。另外,FLASH CS3也全面支持AS之前的版本,從AS1到AS2均支持。

3.作為初學者,因為沒有基礎,不存在用慣一個版本的軟體,用新版本時要重新熟悉的問題,所以應盡量選擇最新版本的軟體進行學習,因為時代是在進步的,老版本的軟體,學完了也就淘汰了,再學新的,還得重新熟悉界面及操作習慣。

4.目前由於flash cs4 10月份剛剛推出,目前CS4的教材並不多也不系統,所以建議以FLASH CS3作為學習的開始,而且FLASH CS4的界面和CS3差不多,只是加了些新功能。

問:怎樣學會flash編程,要有什麼基礎,要學c語言嗎,哪裡有教程啊?該怎麼學啊??

答:

如果你只是了解一下,網上的視頻教程很多,可以去看一看。

但是如果你是很想學會,那麼我建議你,要學習一門知識,就必須看系統的教材。因此不推薦看視頻教程,網上的視頻教程雖然很多,但是都很難系統性的教會你代碼的結構、編程的思想。所以我的建議是買書學習。最好不要看電子書,個人覺得,看電子書的人,都喜歡跳著看,這樣看就失去了意義。這樣看下來,好像學會了,其實什麼原理都沒搞懂。

要真正的買一本書,一頁一頁的翻著看,看一遍不夠,一本書至少3遍甚至n遍。還要多加練習。學習編程,首先從hello world開始,然後就是要每天寫,經常寫,這樣才有進步。

很多人也有這樣的擔心,怕自己沒有語言基礎,例如沒有學習過C等。其實大可不必擔心,語言只是一種工具而已,目前的主流語言就好象同素異形體一樣,看似有區別,其實都差不多。這就好像你會使用WIN98,升級到了WIN XP,你也不會說,連怎麼打開文件都要重頭學習一樣。學習編程的關鍵是學習編程的思想,所以好的書教你怎麼理解編程思想,差的書只是叫你怎麼寫代碼,其中區別很大。

AS2的書,這里不做推薦了,我也沒看過什麼好點的書,我學AS2完全就是看幫助學會的,主要是有JS基礎。

這里推薦一本AS3的書:《action script3.0殿堂之路》

問:我是老程序員了,對Javascript和Java都比較擅長,現在想學Flex,但不知道有什麼經典一點的書籍?

答:

1.初學者,推薦《action script3.0殿堂之路》,也有人推薦《as3權威寶典》個人覺得那書寫的不行。

2.flex的話,推薦《flex第一步》

3.as3語言掌握的7788了以後,可以去看以下一些書籍

4.實用書籍:

Action Script3.0 Cook Book —— 類似幫助手冊的書籍

Action Script3.0 設計模式 —— 一本講述程序設計思想的書籍,強烈推薦

問:flash as2.0 與 as3.0的本質區別?

答:

首先說下as2,as2實際上是as1的升級版,引入一面向對象的概念,但並不是完全面向對象的語言,只是在編譯過程中支持OOP語法。as2的面向對象雖然不全面,但是卻是首次將OOP帶到了FLASH,而AS3是一個完全基於OOP的標准化面向對象語言,最重要的就是as3不是as2的簡單升級,而完全是兩種思想的語言。可以說,as3全面採用了面向對象的思想,而as2則仍然停留在面向過程階段,舉個例子,就像VB和C#的對比。

所以as3絕不是as2的升級版,在as3里,可以看到java和c#的影子,確實,這三種語言大部分思想都是一致的,只有一些小的區別,比如as3引入了命名空間的概念,但是不支持比如委託,在包封裝及外部訪問上也引入了一些新概念。

在編譯階段,as2採用的是AVM1(actionScript vitual machine),而as3採用的是AVM2。新一代虛擬機採用了OOP思想,在執行速度上比起avm1也快了10倍。還提供了異常處理。以前我們在使用AS2時,一旦出錯,AVM1選擇的是靜默失敗,讓人根本不知道什麼地方出錯了,會浪費大量的時間去查錯,而AVM2與目前主流的編譯器一樣,會有異常處理,運行出錯會輸出錯誤提示,工作效率大大提高。如果做個對比,我想說,AVM1就是大刀長矛,而AVM2就是手槍,大刀和長矛也能殺敵,但是只在面對弱智的敵人才能發揮作用,面對一個大型項目,不用點現代化工具是不行滴。

as2與as3的部分區別,只說一些大的區別,小的不同太多,就不談了:

1.運行時異常機制處理,這個剛才說過了。

2.事件機制,這也是很多人拿起as3就不知所措的原因,初學者會發現連一個按鈕點擊的方法都寫不出來。實際上as3的事件機制採用的是監聽的方式,和as2時代的onClipEvent不同,as3里所有的事件都是需要觸發器,監聽器,執行器三種結構的,這樣做的好處就是使得這個語言非常的堅強,非常的標准化。不像as2,奇形怪狀的代碼漫天飛,可以這樣寫,也可以那樣寫,代碼變得繁復難懂,可讀性太差,執行效率也大大降低。要特別說明的是,as3的所有事件都直接繼承event對象,而event是直接繼承自大老闆Object類,結構多麼完美。所以在as3中,所有的事件都繼承自相同的父親,結構相同,提高了重用性。

3.封裝性,這是as3與as2最大的不同,as3引入了封裝的概念,使得程序安全性大大提高,各個對象之間的關系也通過封裝,訪問控制而得以確定,避免了不可靠的訪問給程序帶來的意外產生。

4.XML,我覺得這是最令人激動人心的改變,現在as3程序員可以很輕松也很自豪的說,我們是使用XML人群中最快樂的人。AS2時代對XML的存取仍然需要解析,而AS3則創新的將XML也視作一個對象,存取XML就像存取普通對象的屬性一樣方便,用點語法就可以,無疑大大提高了效率。

5.最關鍵的一點,容器的概念,AS3採用了容器的思想,告別了as2一個MovieClip打天下的局面。對於as2程序員來說,可能不能理解,我mc用的好好的,幹嘛不讓我用啊。但是當你真正的了解as3的思想的時候,當你真主的體會到OOP的好處的時候,你會覺得as3的容器的思想的完全正確的。as2時代,我們做什麼都用mc,而as2時代的mc也是直接繼承自object,這給了mc極大的許可權,極其多的方法屬性,而有時我們只需要放一個背景圖,並不需要它動,這樣做就造成了極大的浪費。說實在話as2和as3比起來就是浪費之神,所以as2編出的swf絕對比as3編譯出來的swf要大上幾倍。as3把所有你用到的顯示對象都分開,mc的屬性方法都被瓜分開來,舉個例子,你去水果超市買水果,就肯定比直接去大型超市買要方便,更節約時間,時間就是金錢,那就是很大的節省。

當然還有許許多多的不同,比如程序執行機制,設計模式,結構框架等等,這里就不在一一贅述。

問:怎麼才能成為編程高手?

答:

可以說,學會編程並不難,怎麼才能寫出好的程序,這是很多人所困惑的事情,我有時候也是左思右想,覺得自己寫出來的東西太在是太垃圾了。那麼真正的高手他們在做些什麼呢?他們到底因為什麼才能成為高手呢?

其實,我們很多人都僅僅停留在會寫程序的階段,並沒有去研究,一個程序怎麼寫才算是合理的,什麼樣的結構,才是最完善的,什麼樣的布局才是可擴展的。什麼樣的代碼才是最高效的。而這正是高手花功夫去研究的事情,也是為什麼高手能做的更好的原因。

我總結了一下,覺得以下才是一個程序員應該思考的路:

1.第一類人:會寫程序,這沒什麼,人人都能辦到。(70%的程序員都在這里)

2.第二類人:有一定的結構思想,能做設計結構上的調整。能走到這一步,應該可以算真正入門了。(15%的程序員在這里,很不幸,本人也在這里。)

3.第三類人:熟練應用各種設計模式,到了這里,才算涉足高級編程領域。這樣的人才能算高手。(10%左右,我想黑羽同志應該屬於這個級別)

4.第四類人:有演算法分析和創意思維,能做到這一步的人,寫出來的程序就不叫程序了,叫偉大發明!(5%左右,微軟和谷歌的專家們在這里)

5.第五類人:這一類人是我不敢想像的,已經超出我的思考范疇了。(趨向0%)

⑵ 幫介紹本Visual C++的從入門到深入的書

學習C++從入門到精通的的十本最經典書
1.《C++Primer》
有「C++的網路全書」,C++程序員人手必備。對語法、語義的描述非常細致和嚴謹,適合有一定經驗的C、C++程序員作為工具書和理論指導書使用,但由於其有一定深度,而沒有進階順序的章節安排,所以不適合初學者做為教材使用,價格略高。
難度:★★☆
質量:★★★★★
廣度:★★★★★
深度:★★★★
性價:★★★☆

2.
《C++Primer Plus》
初學C++不錯的書,覆蓋面較全,章節安排比較合理,由淺入深,也很容易,故因此失去了一些深度。價格比較便宜,但翻譯質量略有不足。
難度:☆
質量:★★★☆
廣度:★★★★
深度:★★★
性價:★★★☆

3.
《Essential C++》
lippman的一部面向初學者的作品。在他寫了那麼後一本primer之後,為何還要寫這么薄這么淺的書呢?其實primer對於初學者來說太笨重了,而這本書卻是從不同的方面——C++的本質和組織結構對語言進行闡釋,可以幫助初學者對這門語言有一個大致的了解,但知識范圍不很全面,不適合系統學習,讀者需要一定的編程知識。
難度:★☆
質量:★★★★
廣度:★★★☆
深度:★★★
性價:★★☆

4.
《Effective C++》、《More Effective C++》
C++真牛人大手筆,之以條款的形式回答了程序員在使用C++時經常提出的「因該注意些什麼?」,「因該避免什麼?」,「因該怎樣去解決?」,「為什麼?」等問題。C++程序員想要讓自己的水平上更高的檔次,此二書必看。價格稍貴,有一定難度,不適合初學者。
難度:★★★☆
質量:★★★★★
廣度:★★★
深度:★★★★★
性價:★★

5.
《C++編程思想》
除了講述語言之外,有一定的工程性,從設計者的角度來描述C++怎樣應用在實際的項目中。語言描述的全面性欠佳,但還是有一定精度的,尤其是在一些小技巧方面。本書還引入了大量的戰例,通過一個個的真實項目來引導你使用C++的思想去思考問題。翻譯很差,有一定難度。
難度:★★☆
質量:★★★
廣度:★★★☆
深度:★★★★
性價:★★★

6.
《C++大學教程》
正如其名,真正的大學教程,非常適合初學者學習,內容由淺入深,對C++各項特性的描述都很到位,章節的安排很有條理性,但深度略顯不足,翻譯質量不能稱之為很好,有一定的疏漏,但對於厚度來講,價格還算比較便宜。
難度:★
質量:★★★☆
廣度:★★★★★
深度:★★★★
性價:★★★★☆

7.
《C++語言的設計和演化》
對於熱愛C++的朋友來說,確實好書一本,可以當做小說來讀,可以放在廁所或床頭上以供消遣。本書對語言本身描述很少,並有一定難度。讀者需要對C++有一定了解,不適合初學者閱讀。
難度:★★★
質量:★★★
廣度:★★☆
深度:★★★★
性價:★★★

8.
《C++程序設計語言》
C++之父所作,被稱之為「C++聖經」。不僅對語言,而且對語言周邊的一些如發展史、語義哲學都有比較詳細的描述。對語言的描述較為全面,同時包含一部分和程序庫相關聯的知識,並有一定深度,適合有一定語言基礎的初學者,翻譯質量不錯,價格適中。
難度:★☆
質量:★★★★☆
廣度:★★★★☆
深度:★★★★
性價:★★★☆

9.
《深度探索C++對象模型》
第一代C++編譯器開發主管所寫。如果你想成為真正的C++高手,看這本書,他為你講述了編譯器在處理各種語法時在「後台」所做的事。對C++有較深入了解的讀者會在讀後有恍然大悟之感。候傑翻譯,質量相當不錯,但內容太深,只適合對C++有較深了解的讀者,價格偏貴。
難度:★★★★☆
質量:★★★★★
廣度:★★★
深度:★★★★★
性價:★★

10.
《C++程序設計教程》(錢能-清華版)
國人所著,國人水平實在有限,深度和廣度欠佳,放在這十大里實在是因為再挑不出好書了。可圈可點之處有講解較為清析、簡單,符合中國學生思路,價格便宜。
難度:☆
質量:★★★
廣度:★★★☆
深度:★★★

⑶ 哪本"編譯原理"的書比較好

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

下面的資料請作參考:

當代編譯技術三大聖經級別的教材

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年在貝爾實驗室做研究工作。主要研究方向是計算機安全、編譯器設計、程序設計語言等。

⑷ 51單片機匯編語言基礎書籍: 誰有推薦關於學習51單片機匯編語言基礎的書籍 比較好的

《MCS-51/96系列單片機原理及應用》,這個主要是針對匯編的,但是摸索透了之後也要學著接觸C。
還有,如果想真正學好單片機,光看書是肯定不行的,在網上買一塊開發板,照著實驗過一遍,保准你不說精通也學成高手了。

⑸ 有沒有講編譯器如何優化代碼的書,有關C語言的,推薦一下

代碼優化啊,現代編譯器採用優化方法都差不多,看編譯原理就行了,編譯原理也就後面會用一個小章帶過。常用的比如:循環展開,寄存器使用優化,常量直接算出來,除法優化,分支判斷優化等等很多很多。據說除法優化後和乘法相比慢不了多少,沒測過。
其實真正應該看的是計算機組成原理,當你理解了計算機工作機制後,這些優化方法都很容易理解,而且你也會發現,程序的運行效率的提高,一方面要靠處理器,比如流水線,超標量,多級緩沖等技術,另一方面就是編譯器的優化。

⑹ 有沒有教如何編寫編譯器程序的計算機方面的書籍呢

編譯原理
作者: (美)Alfred V.Aho Monica S.Lam Ravi Sethi Jeffrey D.Ullman [作譯者介紹]譯者: 趙建華 鄭滔 戴新宇此書被稱為 龍書可見在編譯原理類書籍中的地位

⑺ 怎樣去寫一個編譯器(用C語言寫C語言編譯器),需要哪些知識做鋪墊,可以給一下相關網站和書籍的推薦嗎

寫編譯器重點就是設計並實現一些數據結構和演算法,語言特點太多的話,代碼寫起來不容易,建議你找一個小語言嘗試下,不要一開始就去嘗試成熟語言。否則你會在寫完語法分析程序以後,遭遇到很大的困難。多數人都是在寫語義分析程序的時候,突然發現自己設計的數據結構很爛,後邊越寫越要命。
如果你想入門編譯器的話,那麼可以看《編譯原理與實踐》,整本書先將編譯器理論,然後後邊教你一步步實現c-miuns(c的子集)的編譯器,包括lex,yacc,都在幾千行代碼左右。這本書講的比較簡單易懂一點
也可以學學斯坦福大學的編譯器設計公開課(aiken設計了一個叫cool的語言,專門用來教人寫編譯器),課程地址上面有人給了:Compilers。這門課以前有個實驗環境(據說已經給了,我以前寫的時候還是用的網上一個不完整的實驗環境),把和編譯器知識無關的內容都給你寫好了,你只需要在固定的地方填上你的內容就可以寫出你的編譯器(不要覺得很簡單哦,人家的代碼寫的很精巧的,讀完就發現寫個好編譯器還是很費腦子的),另外,這個實驗環境有個特點,就是在每一步都提供標准程序做對比,你可以在寫完一部分以後就同標准程序對比,及時發現錯誤。這種方式為寫編譯器又提供了很多幫助
先找個小的,慢慢研究,弄懂了整體的結構再說

⑻ C++演算法的書籍(適合初學的)

高一凡的數據結構與演算法,c++版,適合初學者

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

大學課程為什麼要開設編譯原理呢?這門課程關注的是編譯器方面的產生原理和技術問題,似乎和計算機的基礎領域不沾邊,可是編譯原理卻一直作為大學本科的必修課程,同時也成為了研究生入學考試的必考內容。編譯原理及技術從本質上來講就是一個演算法問題而已,當然由於這個問題十分復雜,其解決演算法也相對復雜。我們學的數據結構與演算法分析也是講演算法的,不過講的基礎演算法,換句話說講的是演算法導論,而編譯原理這門課程講的就是比較專註解決一種的演算法了。在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)都作了十分詳細的說明。這些東西都是我們編寫平常程序的時候經常要做的事情,但是我們卻少去探求其內部是如何完成。
關於中間代碼生成,代碼生成,代碼優化部分的內容就實在不好說了。國內很多教材到了這部分都會很簡單地走馬觀花講過去,學生聽了也只是作為了解,不知道如何運用。不過這部分內容的東西如果要認真講,單獨開一學期的課程都講不完。在《編譯原理及實踐》的書上,對於這部分的講解就恰到好處。作者主要講解的還是一種以堆棧為基礎的指令代碼,十分通俗易懂,讓人看了後,很容易模仿,自己下來後就可以寫自己的代碼生成。當然,對於其它代碼生成技術,代碼優化技術的講解就十分簡單了。如果要仔細研究代碼生成技術,其實另外還有本叫做《》,那本書現在由機械工業出版社引進的,十分厚重,而且是英文原版。不過這本書我沒有把它列為推薦書給大家,畢竟能把龍書的內容搞清楚,在中國已經就算很不錯的高手了,到那個時候再看這本《》也不遲。代碼優化部分在大學本科教學中還是一個不太重要的部分,就是算是實踐過程中,相信大家也不太運用得到。畢竟,自己做的編譯器能正確生成執行代碼已經很不錯了,還談什麼優化呢?
編譯原理的課程畢竟還只是講解原理的課程,不是專門的編譯技術課程。這兩門課程是有很大的區別的。編譯技術更關注實際的編寫編譯器過程中運用到的技術,而原理的課

⑽ 關於計算機編程c語言,java,自學看哪些書比較淺顯易懂

其中《Head First Java》被亞馬遜評為十大好書之一。在京東計算機類書籍中熱度排名第16位,在Java類書籍中排名第2位。豆瓣評分為8.8分,有百分之54.4%的讀者給出了五星評價。在知乎社區中有來自無數位的大神做推薦。哪本書適合推薦給 Java 初學者? - 書籍推薦

密碼:380p

以上都是小編收集了大神的靈葯,喜歡的拿走吧!喜歡小編就輕輕關注一下吧!

熱點內容
手機電量緩存 發布:2025-02-08 09:01:37 瀏覽:898
java怎麼寫程序 發布:2025-02-08 09:00:55 瀏覽:868
javaphp加密 發布:2025-02-08 08:59:45 瀏覽:986
股票避險資產配置哪個好 發布:2025-02-08 08:57:44 瀏覽:878
谷歌瀏覽器開啟ftp 發布:2025-02-08 08:55:08 瀏覽:30
安卓工程師開發是什麼專業 發布:2025-02-08 08:38:15 瀏覽:678
怎麼用電腦和朋友遠程伺服器連接 發布:2025-02-08 08:29:52 瀏覽:233
如何播放咪咕視頻的緩存電影 發布:2025-02-08 08:28:17 瀏覽:574
台式電腦修改密碼在哪裡修改 發布:2025-02-08 08:25:18 瀏覽:297
linux編譯opencv 發布:2025-02-08 08:14:29 瀏覽:713