My Account Log in

2 options

Compilers : principles and practice

O'Reilly Online Learning: Academic/Public Library Edition Available online

View online

O'Reilly Online Learning: Academic/Public Library Edition Available online

View online
Format:
Book
Author/Creator:
Dave, Parag H., Author.
Contributor:
Dave, Himanshu B., Contributor.
Series:
Always learning.
Always Learning
Language:
English
Subjects (All):
Compilers (Computer programs).
Interpreters (Computer programs).
Physical Description:
1 online resource (1 v.) : ill.
Edition:
1st edition
Place of Publication:
[Place of publication not identified] Pearson 2012
Language Note:
English
System Details:
text file
Summary:
Compilers: Principles and Practice explains the phases and implementation of compilers and interpreters, using a large number of real-life examples. It includes examples from modern software practices such as Linux, GNU Compiler Collection (GCC) and Perl. This book has been class-tested and tuned to the requirements of undergraduate computer engineering courses across universities in India.
Contents:
Cover
Contents
List of Figures
List of Tables
List of Algorithms
Preface
Acknowledgements
Chapter 1: Introduction
1.1 Languages
1.1.1 Machine Language
1.1.2 Hex AbsoluteLoaderLanguage
1.1.3 Assembly Language
1.1.4 Macro Assembly Language
1.1.5 Intermediate or ByteCode
1.1.6 High Level Language
1.1.7 Very High Level Language
1.1.8 Why High Level Language?
1.2 Translation Process
1.3 Translation Schemes
1.3.1 T-diagram
1.3.2 Assembler
1.3.3 Macro Assembler
1.3.4 Interpreter
1.3.5 Load-and-Go Scheme
1.3.6 Compiler
1.3.7 What Does a Compiler Do?
1.4 Theoretical Viewpoint
1.4.1 Acceptor and Compiler
1.5 Phases of a Compiler
1.6 A More Detailed Look at Phases of a Compiler
1.6.1 Lexical Analyzer - Scanner
1.6.2 SyntaxAnalyzer - Parser
1.6.3 Semantic Analyzer - Mapper
1.6.4 Code Generation and Machine-dependent Optimization
1.6.5 Optimization
1.6.6 How to Develop Optimized Code?
1.7 A Real-life Compiler-gcc
1.8 What Do We Mean by "Meaning"?
Looking Forward
Historical Notes
Exercises
Web Resources
Glossary
Chapter 2: A Simple Translator
2.1 A Simple Language
2.1.1 Grammar of simple
2.1.2 Target Language
2.1.3 Example Program in Machine Code
2.2 Compiler for Simple
2.2.1 Scanner
2.2.2 Parser
2.2.3 Intermediate Form and Semantic Phase
2.2.4 Code Generation
2.2.5 Comments on the Compiled Code
2.3 A Virtual Machine for Simple
Chapter 3: Lexical Analyzer
3.1 Scanner
3.1.1 Examples: RE, FSM and Implementation
3.2 Symbol Tables and a Scanner
3.3 Compiler Writing Tools
3.3.1 Lex - A Scanner Generator
3.3.2 Flex
3.3.3 Debugging lex and flex
3.4 Error Handling in a Scanner
Glossary.
Chapter 4: Syntax Analyzer
4.1 Top-down and Bottom-up Parsing
4.2 Top-down Parsing
4.2.1 Recursive-descent Parser (RDP)
4.2.2 Exercises
4.2.3 Parser for Simple LL(1) Grammars
4.2.4 LL(1) Grammar Without ε-rules
4.2.5 LL(1) Grammars with ε-rules
4.3 Bottom-up Parsing
4.3.1 Shift/Reduce Parsing
4.3.2 Operator Precedence Parsing
4.3.3 LR Grammars
4.3.4 FSM for an LR(0) Parser
4.3.5 Design of the FSM for an LR(0) Parser
4.3.6 Table-driven LR(0) Parser
4.3.7 Parsing Decision Conflicts
4.3.8 Canonical LR(1) Parser
4.3.9 SLR(1) Parser
4.3.10 Conflict Situations
4.3.11 Look-ahead (LA) Sets
4.3.12 LALR(1) Parser
4.4 Yacc - A Parser Generator
4.4.1 YACC - A Compiler Writing Tool
4.4.2 Working of the Parser Generated by YACC
4.4.3 Input Specification
4.4.4 Recursion in Grammar Specification
4.4.5 Actions
4.4.6 Ambiguity and Conflict Resolution
4.4.7 Error Handling
4.4.8 Arbitrary Value Types
4.4.9 Debugging yacc
4.4.10 Working Examples
4.5 Other Parser Generators
4.5.1 Bison
4.5.2 Parse::Yapp
4.5.3 ANTLR
4.6 Grammar for miniC
4.7 Symbol Table and Parser
4.7.1 Pre-defined Entities
4.8 Real-life - GCC: GNU Compiler Collection
Further Reading
Chapter 5: Syntax-directed Translation
5.1 Implicit Stacking in RDP
5.2 Synchronized Semantic Stacks
5.2.1 Semantic Stack in yacc
5.3 Action Symbols
5.3.1 Action Symbols in yacc
5.4 Attribute Grammars
5.4.1 Syntax-directed Techniques
5.4.2 Definition of Attribute Grammar
5.4.3 Dependency Graphs
5.4.4 Definitions: Inherited and Synthesized Attributes
5.4.5 S-Type Definitions and Grammars
5.4.6 L-Type Definitions and Grammars
5.4.7 Synthesized and Inherited Attributes in yacc
5.4.8 More on Inherited Attributes in yacc.
5.5 Symbol Table Handling
5.5.1 Symbol Table in miniC
5.6 Intermediate Representation Output for miniC
Chapter 6: Type Checking
6.1 Data Types and Type Checking
6.2 Type Expressions and Type Constructors
6.3 Type Equivalence
6.4 Type Names, Declarations and Recursive Types
6.4.1 Recursive Types
6.5 Type Inference
6.5.1 Formal Semantics
6.6 Type Conversion and Coercion
6.7 Overloading of Operators and Functions
6.8 Example: Type Checking in an Interpreter
Chapter 7: Run-Time Environment
7.1 Run-Time Storage Allocation
7.1.1 Static Allocation
7.1.2 Typical Function Calls Interface for C
7.1.3 Dynamic Allocation
7.1.4 Nested Functions in GCC Extension
7.1.5 On-demand or Heap Allocation
7.1.6 Parameter Passing and Calling Conventions
7.1.7 C Variables
7.1.8 Block-structured Languages
7.2 Operating System
7.2.1 A Running Program - A Process
7.2.2 Linux System Calls
7.3 Libraries
7.3.1 Language Library
7.3.2 Special Purpose Libraries
7.4 System Environmental Variables
7.5 Invocation Command-line Parameters
Chapter 8: Intermediate Code
8.1 Building a Parse Tree
8.1.1 Generating Parse Tree in Memory
8.2 Polish Notation
8.2.1 Generating RPN
8.3 N-tuple Notation
8.3.1 Triple notation
8.3.2 Quadruple Notation
8.3.3 Generation of N-tuple Code
8.4 Abstract Syntax Tree
8.4.1 Generating Abstract Syntax Tree
8.5 Abstract or Virtual Machine Code
8.5.1 P-code for a PASCAL Machine
8.5.2 Java Bytecode
8.6 Threaded Code
8.6.1 Subroutine Threaded Code
8.6.2 Direct Threaded Code
8.6.3 Indirect Threaded Code
8.6.4 Token Threaded Code.
8.6.5 Implementation of Threaded Code on Motorola 68000
8.6.6 Implementation of Threaded Code on Intel x86 Machines
8.7 SECD and WAM
8.8 Grammar and IR Generation for miniC
8.8.1 Expressions
8.8.2 Assignments
8.8.3 Statements
8.8.4 IF-THEN and IF-THEN-ELSE
8.8.5 WHILE-DO
8.8.6 Variable Declarations
8.8.7 Function Definitions
8.8.8 Function Calls
8.8.9 Utility Functions Used
8.9 Real-life: Intermediate Codes of GNU gcc
8.9.1 Example GCC Intermediate Code
Chapter 9: Code Generation and Machine-dependent Optimization
9.1 Our Concerns in Code Generation
9.1.1 Input Intermediate Representation (IR)
9.1.2 Nature of Target Language
9.1.3 Selection of Alternatives from Instruction Set
9.1.4 Allocation of CPU Registers
9.1.5 Order of Evaluation Sequence
9.2 The Target Language
9.2.1 x86 Assembly Language in GAS Syntax
9.3 Data Structures
9.3.1 Vectors and Arrays
9.3.2 Vectors
9.3.3 Arrays
9.4 Control Constructs
9.5 Procedures and Function Calls
9.5.1 Function Prologue and Epilogue
9.5.2 Saving Registers
9.5.3 A Test for C Linkage
9.6 The Target Operating Environment
9.6.1 Memory Management
9.6.2 CPU Register Usage
9.6.3 Activation Record (AR)
9.7 Code Optimization
9.8 Machine-dependent Optimization
9.8.1 Register Allocation
9.8.2 Instruction Rescheduling: Use of Parallelism in Instruction Execution
9.9 Converting the 4-Tuple and RPN into Assembly Code
9.9.1 Conversion of 4-Tuple to Assembly Code
9.9.2 Conversion of RPN to Assembly Code
Chapter 10: Code Optimization
10.1 Basic Blocks
10.1.1 Formal Algorithm to Delineate BBs
10.1.2 Reference and Define Information
10.1.3 Loops in Flow-graphs
10.1.4 Example Implementation - miniC.
10.2 Value Numbering Scheme
10.3 Peep-hole Optimization
10.3.1 Strength Reduction
10.3.2 Constant Folding
10.3.3 Constant Propagation
10.3.4 Dead Variable and Dead Code Elimination
10.4 Structural Optimization
10.4.1 Redundant Sub-expressions
10.4.2 Loop Unwinding
10.4.3 Replace Index by Pointers
10.4.4 Code Motion
10.4.5 Variable Folding
10.4.6 In-line Function
10.4.7 Register Allocation
10.5 Global Data-flow Analysis
10.6 Super-optimizers
10.6.1 Massalin's Super-optimizer
10.6.2 GNU GCC Super-optimizer - GSO
10.7 Epilogue
Chapter 11: Overview of Processing of Some Languages
11.1 Java
11.1.1 Brief History
11.1.2 Overview
11.1.3 Characteristics of Java
11.1.4 Development with Java
11.1.5 The First Java Program
11.1.6 Type Conversion
11.2 Perl
11.2.1 Perl Internals
11.3 PROLOG
11.3.1 A Short Introduction to PROLOG
11.4 FORTH
11.4.1 Hello World in Forth
11.4.2 A Quick Introduction to FORTH
11.4.3 Summary
11.4.4 Vmgen
Chapter 12: Project: Compiler for a MiniC
12.1 MiniC Language
12.1.1 What is HOC6?
12.1.2 Objectives of miniC
12.2 Architecture of miniC Compiler
12.3 MiniC Grammar for yacc
12.4 Target Language
12.4.1 x86 Instructions
12.4.2 Assembler Directives
12.4.3 Floating-point Instructions
12.5 Symbol Table
12.6 Scanner
12.7 Parser
12.8 Code Generation
12.8.1 Arithmetic Expression
12.8.2 Assignment
12.8.3 Comparison with Logical Result
12.8.4 Integer Increment and Decrement
12.8.5 IF-THEN-ELSE Construct
12.8.6 Function Definition and Call
12.8.7 Assembly Language Macros
12.8.8 Built-in Functions Library
12.8.9 A Few Example miniC Programs
12.8.10 Assembly Language Idioms
12.8.11 Linux System Calls.
12.9 Testing.
Notes:
Bibliographic Level Mode of Issuance: Monograph
Includes bibliographical references.
Description based on publisher supplied metadata and other sources.
ISBN:
9788131776117
8131776115
OCLC:
1024273426

The Penn Libraries is committed to describing library materials using current, accurate, and responsible language. If you discover outdated or inaccurate language, please fill out this feedback form to report it and suggest alternative language.

Find

Home Release notes

My Account

Shelf Request an item Bookmarks Fines and fees Settings

Guides

Using the Find catalog Using Articles+ Using your account