編譯原理

出版時間:2011-1  出版社:機(jī)械工業(yè)出版社  作者:Alfred V. Aho,Monica S. Lam,Ravi Sethi,Jeffrey D. Ullman  頁數(shù):1009  
Tag標(biāo)簽:無  

前言

In the time since the 1986 edition of this book, the world of compiler designhas changed significantly. Programming languages have evolved to present newcompilation problems. Computer architectures offer a variety of resources ofwhich the compiler designer must take advantage. Perhaps most interestingly,the venerable technology of code optimization has found use outside compilers.It is now used in tools that find bugs in software, and most importantly, findsecurity holes in existing code. And much of the "front-end" technology ——grammars, regular expressions, parsers, and syntax-directed translators —— arestill in wide use.Thus, our philosophy from previous versions of the book has not changed.We recognize that few readers will build, or even maintain, a compiler for amajor programming language. Yet the models, theory, and algorithms associ-ated with a compiler can be applied to a wide range of problems in softwaredesign and software development. We therefore emphasize problems that aremost commonly encountered in designing a language processor, regardless ofthe source language or target machine.Use of the BookIt takes at least two quarters or even two semesters to cover all or most of thematerial in this book. It is common to cover the first half in an undergraduatecourse and the second half of the book —— stressing code optimization —— ina second course at the graduate or mezzanine level. Here is an outline of thechapters:Chapter 1 contains motivational material and also presents some backgroundissues in computer architecture and programming-language principles.Chapter 2 develops a miniature compiler and introduces many of the impor-taut concepts, which are then developed in later chapters. The compiler itselfappears in the appendix.Chapter 3 covers lexical analysis, regular expressions, finite-state machines, andscanner-generator tools. This material is fundamental to text-processing of allsorts.

內(nèi)容概要

本書是編譯領(lǐng)域無可替代的經(jīng)典著作,被廣大計算機(jī)專業(yè)人士譽(yù)為“龍書”。本書上一版自1986年出版以來,被世界各地的著名高等院校和研究機(jī)構(gòu)(包括美國哥倫比亞大學(xué)、斯坦福大學(xué)、哈佛大學(xué)、普林斯頓大學(xué)、貝爾實(shí)驗(yàn)室)作為本科生和研究生的編譯原理課程的教材。該書對我國高等計算機(jī)教育領(lǐng)域也產(chǎn)生了重大影響。
  第2版對每一章都進(jìn)行了全面的修訂,以反映自上一版出版20多年來軟件工程。程序設(shè)計語言和計算機(jī)體系結(jié)構(gòu)方面的發(fā)展對編譯技術(shù)的影響。本書全面介紹了編譯器的設(shè)計,并強(qiáng)調(diào)編譯技術(shù)在軟件設(shè)計和開發(fā)中的廣泛應(yīng)用。每章中都包含大量的習(xí)題和豐富的參考文獻(xiàn)。
  本書適合作為高等院校計算機(jī)專業(yè)本科生和研究生的編譯原理與技術(shù)課程的教材,也可供廣大計算機(jī)技術(shù)人員參考。
  cd中包含如下內(nèi)容:
  ·comptia project+考試模擬題。
  ·作者的項(xiàng)目管理培訓(xùn)視頻。
  ·項(xiàng)目管理工作表和模板。

作者簡介

Alfred
V.Aho,美國歌倫比亞大學(xué)教授,美國國家工程院院士,ACM和IEEE會士,曾獲得IEEE的馮·諾伊曼獎。著有多部算法、數(shù)據(jù)結(jié)構(gòu)、編譯器、數(shù)據(jù)庫系統(tǒng)及計算機(jī)科學(xué)基礎(chǔ)方面的著作。

書籍目錄

1 introduction
 1.1 language processors
 1.2 the structure of a compiler
 1.3 the evolution of programming languages
 1.4 the science of building a compiler
 1.5 applications of compiler technology
 1.6 programming language basics
 1.7 summary of chapter 1
 1.8 references for chapter 1
2 a simple syntax-directed translator
 2.1 introduction
 2.2 syntax definition
 2.3 syntax-directed translation
 2.4 parsing
 2.5 a translator for simple expressions
 2.6 lexical analysis
 2.7 symbol tables
 2.8 intermediate code generation
 2.9 summary of chapter 2
3 lexical analysis
 3.1 the role of the lexical analyzer
 3.2 input buffering
 3.3 specification of tokens
 3.4 recognition of tokens
 3.5 the lexical-analyzer generator lex
 3.6 finite automata
 3.7 from regular expressions to automata
 3.8 design of a lexical-analyzer generator
 3.9 optimization of dfa-based pattern matchers
 3.10 summary of chapter 3
 3.11 references for chapter 3
4 syntax analysis
 4.1 introduction
 4.2 context-free grammars
 4.3 writing a grammar
 4.4 top-down parsing
 4.5 bottom-up parsing
 4.6 introduction to lr parsing: simple lr
 4.7 more powerful lr parsers
 4.8 using ambiguous grammars
 4.9 parser generators
 4.10 summary of chapter 4
 4.11 references for chapter 4
5 syntax-directed translation
 5.1 syntax-directed definitions
 5.2 evaluation orders for sdd's
 5.3 applications of syntax-directed translation
 5.4 syntax-directed translation schemes
 5.5 hnplementing l-attributed sdd's
 5.6 summary of chapter 5
 5.7 references for chapter 5
6 intermediate-code generation
 6.1 variants of syntax trees
 6.2 three-address code
 6.3 types and declarations
 6.4 translation of expressions
 6.5 type checking
 6.6 control flow
 6.7 backpatching
 6.8 switch-statements
 6.9 intermediate code for procedures
 6.10 summary of chapter 6
 6.11 references for chapter 6
7 run-time environments
 7.1 storage organization
 7.2 stack allocation of space
 7.3 access to nonlocal data on the stack
 7.4 heap management
 7.5 introduction to garbage collection
 7.6 introduction to trace-based collection
 7.7 short-pause garbage collection
 7.8 advanced topics in garbage collection
 7.9 summary of chapter 7
 7.10 references for chapter 7
8 code generation
 8.1 issues m the design of a code generator
 8.2 the target language
 8.3 addresses in the target code
 8.4 basic blocks and flow graphs
 8.5 optimization of basic blocks
 8.6 a simple code generator
 8.7 peephole optimization
 8.8 register allocation and assignment
 8.9 instruction selection by tree rewriting
 8.10 optimal code generation for expressions
 8.11 dynamic programming code-generation
 8.12 summary of chapter 8
 8.13 references for chapter 8
9 machine-independent optimizations
 9.1 the principal sources of optimization
 9.2 introduction to data-flow analysis
 9.3 foundations of data-flow analysis
 9.4 constant propagation
 9.5 partial-redundancy elimination
 9.6 loops in flow graphs
 9.7 region-based analysis
 9.8 symbolic analysis
 9.9 summary of chapter 9
 9.10 references for chapter 9
10 instruction-level parallelism
 10.1 processor architectures
 10.2 code-scheduling constraints
 10.3 basic-block scheduling
 10.4 global code scheduling
 10.5 software pipelining
 10.6 summary of chapter 10
 10.7 references for chapter 10
11 optimizing for parallelism and locality
 11.1 basic concepts
 11.2 matrix multiply: an in-depth example
 11.3 iteration spaces
 11.4 aftlne array indexes
 11.5 data reuse
 11.6 array data-dependence analysis
 11.7 finding synchronization-free parallelism
 11.8 synchronization between parallel loops
 11.9 pipelining
 11.10 locality optimizations
 11.11 other uses of affine transforms
 11.12 summarv of chapter 11
 11.13 references for chapter 11
12 interprocedural analysis
 12.1 basic concepts
 12.2 why interprocedural analysis?
 12.3 a logical representation of data flow
 12.4 a simple pointer-analysis algorithm
 12.5 context-insensitive interprocedural analysis
 12.6 context-sensitive pointer analysis
 12.7 datalog implementation by bdd's
 12.8 summary of chapter 12
 12.9 references for chapter 12
a a complete front end
 a.1 the source language
 a.2 main
 a.3 lexical analyzer
 a.4 symbol tables and types
 a.5 intermediate code for expressions
 a.6 jumping code for boolean expressions
 a.7 intermediate code for statements
 a.8 parser
 a.9 creating the front end
b finding linearly independent solutions
index

章節(jié)摘錄

插圖:Languagel, are used to search databases. Database queries consist of predicatescontaining relational and boolean operators. They can be interpreted or com-piled into commands to search a database for records satisfying that predicate.Compiled SimulationSimulation is a general technique used in many scientific and engineering disci-plines to understand a phenomenon or to validate a design. Inputs to a simula-tor usually include the description of the design and specific input parametersfor that particular simulation run. Simulations can be very expensive. We typi-cally need to simulate many possible design alternatives on many different inputsets, and each experiment may take days to complete on a high-performancemachine. Instead of writing a simulator that interprets the design, it is fasterto compile the design to produce machine code that simulates that particulardesign natively. Compiled simulation can run orders of magnitude faster thanan interpreter-based approach. Compiled simulation is used in many state-of-the-art tools that simulate designs written in Verilog or VHDL.1.5.5  Software Productivity ToolsPrograms are arguably the most complicated engineering artifacts ever pro-duced; they consist of many many details, every one of which must be correctbefore the program will work completely. As a result, errors are rampant inprograms; errors may crash a system, produce wrong results, render a systemvulnerable to security attacks, or even lead to catastrophic failures in criticalsystems. Testing is the primary technique for locating errors in programs.An interesting and promising complementary approach is to use data-flowanalysis to locate errors statically (that is, before the program is run). Data-flow analysis can find errors along all the possible execution paths, and notjust those exercised by the input data sets, as in the case of program testing.Many of the data-flow-analysis techniques, originally developed for compileroptimizations, can be used to create tools that assist programmers in theirsoftware engineering tasks.The problem of finding all program'errors is undecidable. A data-flow anal-ysis may be designed to warn the programmers of all possible statements witha particular category of errors. But if most of these warnings are false alarms,users will not use the tool. Thus, practical error detectors are often neithersound nor complete. That is, they may not find all the errors in the program,and not all errors reported are guaranteed to be real errors. Nonetheless, var-ious static analyses have been developed and shown to be effective in findingerrors, such as dereferencing null or freed pointers, in real programs. The factthat error detectors may be unsound makes them significantly different fromcompiler optimizations. Optimizers must be conservative and cannot alter thesemantics of the program under any circumstances.

編輯推薦

《編譯原理(英文版·第2版)》:經(jīng)典原版書庫

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    編譯原理 PDF格式下載


用戶評論 (總計83條)

 
 

  •   編譯原理就看這本了!英文版還可以鍛煉英文
  •   這是一本很經(jīng)典的編譯原理教材,適合本科教學(xué)或者自學(xué)使用.不過此版本的紙張不是很好,字也比較小,建議買人民郵電出版社的影印版.
  •   雖然我的英語不是很好,但是從前面一章來看的話,就是幾個專業(yè)詞匯重復(fù)出現(xiàn)的頻率較高,算比較好懂。從內(nèi)容的本身上來說,都覺得這本書了解編譯原理是十分合適的,特別是從理論上去了解,可能要真的想自己動手編這本書的實(shí)踐性就差點(diǎn)了。
  •   編譯原理之中的經(jīng)典之作,而且英文的讀起來更有感覺,更貼近作者本身的想表達(dá)的意思。
  •   編譯原理的經(jīng)典書籍!
  •   再寫多少評論也無改這本書的地位。
    知道的人,不會因?yàn)樵u論怎么樣會影響對這本書的購買需求。
    不知道的人,其實(shí)也不用買這本書。
    不過還是推薦一下。
    對編譯原來有興趣,就看看吧。
  •   學(xué)編譯原理不容錯過的書籍
  •   懂得編譯原理的人才是真正的大牛~
  •   曾經(jīng)簡單看了會中文版,覺得很不爽,很難理解。后來對比看了英文版,才發(fā)現(xiàn)原版英文書看起來很爽有木有??!強(qiáng)烈推薦直接看原版??!神書??!
  •   在讀中,編譯總體比較抽象,確實(shí)有點(diǎn)不好理解。。。書看得很慢
  •   不是輕意能讀得懂的一本書,不在于其是英文版,而是在于這些知識是一般編程的人接觸得較少的。要掌握還是得需要反復(fù)地、耐心地、每次拿出整樁時間來讀,不適合作為床前讀物。盡管很難,但對于想要在編程方面進(jìn)階的話,尤其是提高效率的話,這方面的知識就必不可少了。
  •   看計算機(jī)的書還是要看原版的
  •   龍書很經(jīng)典了,質(zhì)量也很不錯
  •   終于得到了 傳說中的 “龍書”,學(xué)習(xí)中!
  •   很好,塑封包裝,紙質(zhì)比郵電版的好,但是字比郵電版的小,看起來比較累
  •   比起看中文版果然更加好,是本好書~
  •   一邊看龍書,一邊學(xué)英語,
  •   經(jīng)典原版書
  •   經(jīng)典,我喜歡原版書。尤其是經(jīng)典的
  •   里面包含了我想要了解的東西,我喜歡去閱讀第一手資料
  •   快遞速度很快,紙張很不錯,很是經(jīng)典的
  •   語言通俗易懂,對英語水平的要求不是很高,但要潛心思考才能領(lǐng)悟得透。
  •   循序漸進(jìn) 好教材
  •   很值得收藏和適合理論基礎(chǔ)學(xué)習(xí)
  •   前幾天收到的貨,送貨效率挺高。
    書也非常好
  •   書的紙張質(zhì)量一般,希望不要有錯誤才好!
  •   書送到的很快,大略翻了下,木有空白頁之類的情況。而且是新書。
  •   寫的非常詳細(xì),拜讀中。。。。。。
  •   受教育,推薦。
  •   印刷沒什么問題,紙還是很薄,內(nèi)容好多啊
  •   不錯,得細(xì)細(xì)研讀
  •   值得仔細(xì)好好讀。
  •   being dong
  •   需要,當(dāng)年被非典攪和了,沒學(xué)好。
  •   原版的東西,一般都不差的。
  •   沒啥好說的,慢慢啃英文磚頭書吧。。
  •   送的速度很快,一天之內(nèi)就送到了,服務(wù)態(tài)度還好
  •   速度怎么變慢了,在北京要兩天?
  •   很好。很滿意!
  •   我們上課用的,沒辦法才買
  •   這本書基本是天書,因?yàn)槲揖幾g原理本來就不懂,在加上又是為國人寫得
  •   只是搞不明白為什么要用Java去實(shí)現(xiàn)一個編譯器?
  •   看了電子版的,才決定買這本書的,到手后還沒開始看。作為龍書,當(dāng)然不是一兩天就能讀懂的,希望能堅持讀下去。
  •   內(nèi)容不錯,不愧是龍書,但是紙張?zhí)睿衅祈摰牡胤?/li>
  •   書比我想象中要小,一千多頁也不是很厚,不過紙質(zhì)還不錯,印刷什么的都很好,這本書夠我看的了。
  •   寫的比較細(xì)致,可以一邊學(xué)英文,一邊學(xué)編程,一舉兩德。
  •   中文版的實(shí)在是爛!原版的好很多,就是書小了點(diǎn),字小了點(diǎn)。
  •   當(dāng)然內(nèi)容不用說了。
  •   印刷得字有點(diǎn)小了,看著費(fèi)勁,其他的還可以
  •   值得精讀多遍
  •   翻譯的圖書并不能完全表達(dá)原文的意思,雖然已經(jīng)翻譯的很好。
    這本書我只需要看詞法解析器、語法分析器。后面的部分太復(fù)雜,沒有看了。
    希望能把這本書,和翻譯版的書分成上下兩冊。
  •   早知道買翻譯版的了
  •   包裝不錯,還不錯,還沒看,看起來挺厚
  •   印刷用紙?zhí)〈嬖跉堩?/li>
  •   平時沒有看太多英文原著,所以...
  •   書很小,看起來就一個練習(xí)本那么大,紙張質(zhì)量也不好,心里落差比較大
  •   非常值得閱讀跟收藏的一本書!
  •   書的內(nèi)容是很好的,但是書的字太小了,看起來很辛苦,另外習(xí)題答案在網(wǎng)上找不到,找到的都是不完整的,希望有人能提供答案
  •   印裝質(zhì)量一般真的很一般,機(jī)械工業(yè)出版社都是這樣啦!
  •   其他都還好,就是紙張?zhí)×?/li>
  •   內(nèi)容好,但出版社偷懶啦。
  •   買了本英文版的,希望能更貼切的學(xué)習(xí),編譯原理還是很重要很有用的,學(xué)計算機(jī)的還好好是看看這本書。
  •   相比中文圖書來說,英文圖書能看到作者本意,還能學(xué)習(xí)英語 一舉兩得
  •   The "Dragon Book". This is the updated edition of the classic compiler textbook. The coverage of grammars, parsing and optimization is very strong (and has the best theoretical treatment - well beyond what we will normally do); but the material on semantics and type checking is mixed up with intermediate code generation, and there is very little about SSA representations of programs.For a serious reader considering a more practical book about building a real world modern compiler, two more books may help:Engineering a Compiler, Cooper and Torczon (Morgan-Kaufman..., 2004).andModern Compiler Implementation in Java, Appel (Cambridge University Press, 2nd edition, 2002) 閱讀更多 ›
  •   關(guān)鍵的是書里面的英文都簡單易懂啊!沒什么閱讀困難,很不錯!雖然這本紙質(zhì)書的特點(diǎn)是,字小,紙張透明,并且是那種小十六開的書,看書有一點(diǎn)不爽,因?yàn)檫@個給四星!!為什么不出質(zhì)量好一點(diǎn)的呢,這么經(jīng)典的書,即使貴一點(diǎn)也沒有關(guān)系?。?!
  •   不過買回來了以后隨便翻了一翻就開始睡大覺了。
  •   很不錯嘛,用來收藏挺好
  •   書的內(nèi)容不必多說,是編譯原理的泰斗級讀物。書紙張符合機(jī)工社一貫傳統(tǒng),薄如蟬翼。
  •   習(xí)題有難度。第二章排布有點(diǎn)雜亂。閱讀感受尚可。有時走神則全頁如同天書,原版雖好,中文吾愛啊。
  •   全英文的,必須打起精神來看。
  •   書好小阿,,又厚,,這樣排版太不合適了。。剛到手就變成兩半了
  •   上課用的...還行 帶著也挺方便~
  •   龍書必須是得5星。。
  •   32開,但是很厚,買了之后聽說很難
  •   不管怎么說,我的這本是正版的。書的內(nèi)容都知道,不評價。經(jīng)典就是經(jīng)典
  •   內(nèi)容通俗易懂,覆蓋全面,知識點(diǎn)很細(xì),注重思想,安排也很合理,很喜歡這本書。
  •   好。八。。。。。。。。。
  •   給力的龍書
  •   對英文要求高
  •   是真的,不錯哦
  •   完全憑著名字買的
  •   書比想象中的小一大圈
  •   經(jīng)典龍書
 

250萬本中文圖書簡介、評論、評分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號-7