This book provides the foundation for understanding the theory and pracitce of compilers. Revised and updated, it reflects the current state of compilation. Every chapter has been completely revised to reflect developments in software engineering, programming languages, and computer architecture that have occurred since 1986, when the last edition published. The authors, recognizing that few readers will ever go on to construct a compiler, retain their focus on the broader set of problems faced in software design and software development. Computer scientists, developers, and aspiring students that want to learn how to build, maintain, and execute a compiler for a major programming language.
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 Implementing 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 in 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 Affine 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 Summary 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
《写给架构师的Linux实践》内容简介:本书首先概述Linux项目的设计方法,然后讲解在设计此类项目时,所要注重的核心理念,以及在用
《知足知不足:季羡林精读》内容简介:《知足知不足:季羡林精读》是著名东方学学者季羡林一生散文作品的精选集,包括《赋得永久的
单片机原理及应用(第二版)普通高等教育十一五国家级规划教材 内容简介 简介本书为普通高等教育“十一五”国家级规划教材(高职高专教育)。全书共分为五章,主要内容包...
《射频和无线技术入门(第2版)》主要内容:近几年来,无线通信系统在世界范围内得到了迅速发展,并不断有新技术出现,主要在于射频
《英语畅谈世界文化100主题》内容简介:本书精选100篇情景对话,以中英双语解读世界各国的文化风情,书中别有韵味的风土人情、炫目
程序员2007精华本 上下册 本书特色 《程序员》杂志每年末精心打造的“合订本”已经形成一个品牌,得到广大《程序员》杂志的读者和其他对之感兴趣的读者的认可和喜爱...
《中国创投地图2》内容简介:《中国创投地图2》围绕着人工智能、区块链、教育、医疗、小程序、新零售,聚百家之言,从行业专家、投
本书是CSS3领域的标准性著作,由资深Web前端工程师根据CSS3的最新技术标准撰写。内容极为全面、丰富和翔实,由浅入深地讲解了CSS
《工业产品设计手绘典型实例(第3版)》内容简介:本书共12章,分为3个层次,对应教学的需要,第1~3章是基础部分,主要讲述线条、
《手绘设计草图表现技法》内容简介:本书阐述了手绘图透视表现的基本原理、制图方法和物体的质感表现等,介绍了多种手绘图表现的画
vim是一款功能丰富而强大的文本编辑器,其代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中得到非常广泛的使用。v
《互联网金融弄潮儿——第三方支付》内容简介:本书从市场的角度,通过认真的调查与分析,以实际案例为导向,由浅入深,分板块串联
机器视觉算法与应用 本书特色 详述了机器视觉系统的各个组成部分、部件选择和设计要点详述了各种处理算法的原理、特点、适用性、实现及优化方法针对不同行业和应用领域剖...
维维安·维斯特伍德她是国际时尚界的一个标志,从创作早年的朋克时装到成立自己的时装工作室,维斯特伍德的事业成功地跨越了三十
《中国经济改革与发展研究报告(2017)》内容简介:本书以“创新:引领发展的第一动力”为主题,从产业升级、全要素生产率、增长动
深入浅出玩转FPGA-第2版-含光盘 本书特色 《深入浅出玩转fpga(第2版)》收集整理了作者在fpga学习和实践中的经验点滴。书中既有日常的学习笔...
《不慌不忙,人生慢慢来》内容简介:这是一本写给都市迷茫女性的人生答案之书。当下世界变化太快,人很容易被快速变化的世界裹挟,
渡边修司Shujiwatanabe日本立命馆大学教授,日本立命馆游戏研究中心运营委员,日本数字游戏学会研究委员,1997年,以《最终幻想7
《开源硬件创客》内容简介:本书共分18章,前3章是本书的基础章节,主要介绍了树莓派的一些基本情况和基本操作,来让读者了解树莓派
字体对于很多刚开始接触学习的人来说,是一条很难跨越的鸿沟,虽然国内外也有相关方面的书籍(以国外作品为主),但终究还是不适