Compilers: Principles, Techniques, and Tools

Compilers: Principles, Techniques, and Tools
复制标题

DOI:
--
复制
发表时间:
1986
期刊:
--
影响因子:
--
通讯作者:
Alfred V. Aho;Ravi Sethi;J. Ullman
Alfred V. Aho;Ravi Sethi;J. Ullman
中科院分区:
其他
文献类型:
--
作者:
Alfred V. Aho;Ravi Sethi;J. Ullman

文献摘要

被引文献

相似文献

1简介1.1语言处理器1.2编译器的结构1.3编程语言的发展1.4构建编译器的科学1.5编译技术的应用1.6编程语言基础1.7第1章的摘要1.8第1章的参考2简单语法制导的翻译器2.1简介2.2语法定义2.3语法制导的翻译2.4语法制导的翻译2.5简单表达式的翻译器2.6词法分析2.7符号表2.8中间代码生成2.9第2章3词法分析的摘要3.1词法分析器的作用3.2输入缓冲3.3标记的规范3.4标记的识别3.5词法分析器生成器Lex 3.6有限自动机3.7从正则表达式到自动机3.8词法分析器生成器的设计3.9基于DFA的模式匹配器的优化3.10第三章概述3.11第三章的参考4语法分析4.1简介4.2上下文无关语法4.3编写语法4.4自上而下分析4.5自下而上分析4.6简介到LR分析:Simple LR 4.7更强大的LR解析器4.8使用不明确的语法4.9解析器生成器4.10第4章的摘要4.11第4章的参考5.语法定向的翻译5.1语法定向的定义5.2 SDD的应用的评估顺序5.4语法定向的翻译方案5.5实现L属性的SDD的5.6第5章的摘要5.7第5章的参考6中间代码生成6.1语法树的变体6.2三地址代码6.3类型和声明6.4表达式的翻译6.5类型检查6.6控制流6.7回补6.8 Switch-语句6.9过程的中间代码6.10第6章摘要6.11第6章7运行时环境的参考7.1存储组织7.2堆栈空间分配7.3堆栈上的非本地数据访问7.4堆管理7.5垃圾收集简介7.6基于跟踪的收集7.7短暂暂停垃圾收集7.8垃圾收集7.9摘要中的高级主题第7章7.10第7章代码生成8.1代码生成器设计中的问题8.2目标语言8.3在目标代码8.4基本块和流程图中处理8.5基本块的优化8.6简单代码生成器8.7窥视孔优化8.8寄存器分配和分配8.9通过树重写进行指令选择8.10表达式的最佳代码生成8.11动态编程代码生成8.12第8章8.13第8章的参考9.1与机器无关的优化9.1主要优化来源9.2数据流分析简介9.3数据流分析的基础9.4恒定传播9.5部分冗余消除9.6流程图中的循环9.7基于区域的分析9.8符号分析9.9第9章的摘要9.10第9章的参考10 10指令级并行10.1处理器体系结构10.2代码调度约束10.3基本块调度10.4全局代码调度10.5软件流水线10.6第10章的摘要10.7第10章的参考并行优化和局部性11.1基本概念11.2矩阵乘法:深入示例11.3迭代空间11.4仿射数组索引11.5数据重用11.6数组数据相关性分析11.7查找无同步并行性11.8并行循环之间的同步11.9流水线11.10局部性优化11.11仿射变换的其他用法11.12 11.12第11章11.13第11章11.13第11章的参考12.1基本概念12.1基本概念12.2为什么是过程间分析?12.3数据流的逻辑表示12.4简单的指针分析算法12.5上下文不敏感的过程间分析12.6上下文敏感的指针分析12.7 BDD的数据日志实现12.8第12章的摘要12.9源语言A.2主A.3词法分析器A.4符号表和类型A.5表达式的中间代码A.6布尔表达式的跳跃代码A.7语句的中间代码A.8解析器A.9创建前端B查找线性独立解索引
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