Muutke küpsiste eelistusi

E-raamat: Trustworthy Compilers [Wiley Online]

(Computer Science Department, St. Petersburg University (Russia))
Teised raamatud teemal:
  • Wiley Online
  • Hind: 163,88 €*
  • * hind, mis tagab piiramatu üheaegsete kasutajate arvuga ligipääsu piiramatuks ajaks
Teised raamatud teemal:
The Most Complete, Real-World Guide to Compiler Development—and the Principles of Trustworthy Compilers Drawing on the authors over thirty years of expertise in compiler development, research, and instruction, Trustworthy Compilers introduces and analyzes the concept of trustworthy compilers and the principles of trustworthy compiler development, and provides analytical overview of other promising research works in this area. Vladimir Safonov shares the benefit of his long experience as a teacher and compiler development professional to explain that—even in such a well-studied area as compilers—there is still an opportunity for original results, efficient algorithms, and promising research and development. Beginning with a definition of the trustworthy compiler and a review of the history of compiler development, Trustworthy Compilers features: A complete overview of all essential compiler topics, including lexical analysis, parsing, semantic analysis, compiler optimization, code generation, and traditional and modern approaches to runtime Efficient, ready-to-apply algorithms for various phases of compilation, especially for semantic analysis, developed by the author and used in his real compilers High-yield coverage of graph compilers—a novel compiler development area—plus related concepts such as graph grammars and graph compilers, and editor development tools such as DiaGen Real projects—using examples of real compilers—that cover the key topics related to compiler development and compiling methods A survey of novel kinds of compilation, including just-in-time (JIT) and ahead-of-time (AOT) compilation, which are characteristic of modern software development platforms Java and .NET Sections on modern compiler tools—such as ANTLR, CoCo/R, and SableCC Covering both classical techniques and innovative ones not covered by other books, Trustworthy Compilers helps both practicing professionals and students meet the challenge of?making compilers more trustworthy. The books companion Web page (www.vladimirsafonov.org/trustworthycompilers) provides an overview of the book and related resources for compiler teachers and students.
Preface xiii
Acknowledgments xix
1 Introduction
1(15)
1.1 The Concept of a Trustworthy Compiler
2(2)
1.2 Kinds of Compilers
4(1)
1.3 Evolution of Java Compilers
5(1)
1.4 Compilation for .NET
6(1)
1.5 Phases of Compilation
7(1)
1.6 Overview of Compiler Development Principles and Technologies
8(5)
1.7 History of Compiler Development in the U.S.S.R. and in Russia
13(3)
Exercises to
Chapter 1
15(1)
2 Theoretical Foundations and Principles of Trustworthy Compilers
16(15)
2.1 The Trustworthy Computing (TWC) Initiative
16(1)
2.2 TWC and Trustworthy Compilers
17(7)
2.3 Verified Compilers
24(2)
2.4 Spec#: Microsoft's Approach to Verifying Compilers
26(2)
2.5 Perspectives of Verified and Verifying Compilation
28(3)
Exercises to
Chapter 2
29(2)
3 Lexical Analysis and Its Trustworthiness Principles
31(21)
3.1 Token Classes
31(2)
3.2 The Output of the Lexical Analyzer
33(1)
3.3 Processing White Spaces, Comments, and New Lines
34(1)
3.4 Theoretical Models of Lexical Analysis
35(3)
3.5 Lexical Errors, Error Diagnostics, and Recovery
38(1)
3.6 Processing Identifiers and Keywords
38(4)
3.7 The Architecture of a Lexical Analyzer and the Principles of Its Implementation
42(3)
3.8 The Lexical Analyzer Generator Lex
45(3)
3.9 Lexical Analyzer Generation in ANTLR
48(4)
Exercises to
Chapter 3
51(1)
4 Parsing and Trustworthy Methods of Syntax Error Recovery
52(45)
4.1 Basic Concepts and Principles of Parsing
53(2)
4.2 Recursive Descent and Simple Lookahead Mechanism
55(7)
4.3 Overview of Error Recovery in Parsing: Error Recovery for Recursive Descent
62(5)
4.4 LR(1) and LALR(1) Parsing
67(14)
4.5 Error Recovery in LR Parsing
81(1)
4.6 The Yacc Parser Generator
82(5)
4.7 The Bison Parser Generator: Generalized LR Parsing
87(2)
4.8 The Yacc++, JavaCC, SableCC, ANTLR, and CoCo/R Object-Oriented Parser Generators
89(8)
Exercises to
Chapter 4
95(2)
5 Semantic Analysis and Typing: Efficient and Trustworthy Techniques
97(55)
5.1 Basic Concepts and Principles of Semantic Analysis
97(2)
5.2 Formal Model of Semantic Analysis: Attributed Grammars
99(4)
5.3 Definition Systems with Forward References and the Algorithm of Their One-Pass Analysis
103(4)
5.4 Commonly Used Semantic Attributes for Program Constructs
107(4)
5.5 Design Flaws of the Semantic Attribute Evaluation and Our Efficient Methods to Speed It Up
111(3)
5.6 Lookup---Traditional and Novel Techniques
114(4)
5.7 Typing and Type-Checking: Basic Concepts
118(3)
5.8 Representing Types at Compile Time
121(2)
5.9 Efficient Method and Algorithm to Represent and Handle Types with Structural Identity
123(3)
5.10 Type Identity and Type Compatibility
126(2)
5.11 Type-Checking, Typing Error Diagnostics, and Recovery
128(3)
5.12 Code Trustworthiness Checks During Semantic Analysis
131(8)
5.13 Checks for Context Restrictions in Semantic Analysis
139(2)
5.14 Intermediate Code Generation---Principles and Architectural Models
141(1)
5.15 Postfix (Reverse Polish) Notation
142(4)
5.16 PCC Trees
146(3)
5.17 Triples
149(1)
5.18 Summary of the
Chapter
150(2)
Exercises to
Chapter 5
151(1)
6 Trustworthy Optimizations
152(22)
6.1 Basic Concepts and Trustworthiness of Optimizations
152(2)
6.2 Optimizations as Mixed Computations
154(1)
6.3 Overview of the Most Common Kinds of Optimizations
155(7)
6.4 Control Flow and Data Flow Dependencies
162(1)
6.5 Static Single Assignment (SSA)
163(2)
6.6 Data Structures Constructed and Used by the Optimizer
165(1)
6.7 Optimization in Sun Studio Compilers
165(2)
6.8 Optimizations of the Java Bytecode
167(3)
6.9 Optimizations of the .NET Common Intermediate Language (CIL) Code
170(1)
6.10 Optimizations during JIT Compilation
170(4)
Exercises to
Chapter 6
173(1)
7 Code Generation and Runtime Data Representation
174(26)
7.1 Target Platforms for Code Generation
174(1)
7.2 Overview of Code Generation Tasks and Goals
175(4)
7.3 Specifics of Code Generation for .NET
179(1)
7.4 Specifics of Code Generation for SPARC Architecture
180(1)
7.5 Representing Types and Addressing Variables
181(5)
7.6 Representing Procedures, Functions, and Methods
186(4)
7.7 Principles of SPARC Architecture
190(2)
7.8 Example of Code Generation for SPARC Architecture
192(3)
7.9 Generation of Debugging Information
195(2)
7.10 Code Generation for Declarations (Definitions), Expressions, and Statements
197(3)
Exercises to
Chapter 7
199(1)
8 Runtime, JIT, and AOT Compilation
200(22)
8.1 The Tasks of the Runtime
200(2)
8.2 The Relationship of the Runtime and the Operating System (OS)
202(1)
8.3 JIT Compilation
203(8)
8.4 The Architecture of FJIT---JIT Compiler for SSCLI/Rotor
211(1)
8.5 The Architecture of Optimizing JIT Compiler for SSCLI/Rotor
212(8)
8.6 AOT Compilation
220(2)
Exercises to
Chapter 8
221(1)
9 Graph Grammars and Graph Compilers
222(17)
9.1 Basic Concepts of Graph Grammars and Graph Compilers
223(3)
9.2 Categorical Approach to Graph Transformations
226(4)
9.3 Reserved Graph Grammars (RGGs)
230(2)
9.4 Layered Graph Grammars
232(1)
9.5 Meta-Modeling Approach to Graph Grammars and Diameta Editor
233(2)
9.6 Hypergraph Approach to Graph Grammars in Diagen
235(2)
9.7 Graph Compiler Generation Tools
237(2)
Exercises to
Chapter 9
238(1)
10 Microsoft Phoenix, Phoenix-Targeted Tools, and Our Phoenix Projects
239(38)
10.1 History of Phoenix and of Our Phoenix Projects
240(2)
10.2 Overview of Phoenix Architecture
242(4)
10.3 Phoenix-Based Tools, Passes, Phases, and Plug-Ins
246(1)
10.4 Phoenix Primitives: Strings and Names
247(1)
10.5 Phoenix Intermediate Representation (IR)
248(5)
10.6 Phoenix Symbol System
253(4)
10.7 Phoenix Type System
257(3)
10.8 Data Flow Analysis, Control Flow Analysis, Graphs, and Static Single Assignment (SSA) in Phoenix
260(4)
10.9 Overview of Other Phoenix Features
264(1)
10.10 Example of a Phoenix-Based Plug-In
265(2)
10.11 Phoenix-Fete---A Compiler Front-End Development Toolkit and Environment Targeted to Phoenix
267(10)
10.11.1 Architectural Specifics of Phoenix-FETE
268(1)
10.11.2 The Input Grammar Meta-Language
269(2)
10.11.3 The Current Status of the Implementation
271(3)
Exercises to
Chapter 10
274(3)
Conclusions 277(2)
References 279(6)
Index 285
VLADIMIR O. SAFONOV is one of the leading specialists in computer science and software engineering in Russia. He is a Professor of Computer Science at St. Petersburg University and the head of the Java Technology Laboratory at the university. In 2000 and 2001, students of his department won the world championship for the ACM programming contest. Professor Safonov holds four U.S. software patents, four Russian software patents, and has published 120 papers and six books. He is the author of Using Aspect-Oriented Programming for Trustworthy Software Development (Wiley). He is the chair of the IEEE Region 8 Russia North-West Computer Society/Technology Management Council Joint Chapter. He was also a Microsoft Research¿2005/2006 RFP winner for TWC and Secure Software Development.