1st Edition
Introduction to Compiler Construction in a Java World
Compilation
Compilers
Why Should We Study Compilers?
How Does a Compiler Work? The Phases of Compilation
An Overview of the j-- to JVM Compiler
The j-- Compiler Source Tree
The Organization of This Book
Lexical Analysis
Introduction
Scanning Tokens
Regular Expressions
Finite State Automata
Nondeterministic Finite-State Automata (NFA) vs. Deterministic Finite-State Automata (DFA)
Regular Expressions to NFA
NFA to DFA
A Minimal DFA
JavaCC: A Tool for Generating Scanners
Parsing
Introduction
Context-Free Grammars and Languages
Top-down Deterministic Parsing
Bottom-up Deterministic Parsing
Parser Generation Using JavaCC
Type Checking
Introduction
The j--Types
j-- Symbol Tables
Pre-Analysis of j-- Programs
Analysis of j-- Programs
The Visitor Pattern and the AST Traversal Mechanism
Programming Language Design and Symbol Table Structure
Attribute Grammars
JVM Code Generation
Introduction
Generating Code for Classes and Their Members
Generating Code for Control and Logical Expressions
Generating Code for Message Expressions, Field Selection and Array Expressions
Generating Code for Assignment and Similar Operations
Generating Code for String Concatenation
Generating Code for Casts
Translating JVM Code to MIPS Code
Introduction
SPIM and the MIPS Architecture
Our Translator
Register Allocation
Introduction
Naïve Register Allocation
Local Register Allocation
Global Register Allocation
Celebrity Compilers
Introduction
The Java HotSpot Compiler
The Eclipse Compiler for Java (ECJ)
The GNU Java Compiler (GCJ)
Microsoft C# Compiler for .NET Framework
Appendix A: Setting Up and Running j--
Appendix B: The j-- Language
Appendix C: Java Syntax
Appendix D: The JVM, Class Files and the CLEmitter
Appendix E: MIPS and the SPIM Simulator
Bibliography
Index
Further Readings and Exercises appear at the end of each chapter.
Biography
Bill Campbell is an associate professor in the Department of Computer Science at the University of Massachusetts, Boston. Dr. Campbell has been teaching compilers for more than twenty years and has commercial experience working with AT&T, Intermetrics Inc., Apple Computer, and Entitlenet. His areas of expertise include software engineering, object-oriented analysis, design and programming, and programming language implementation.
Swami Iyer is a PhD candidate in the Department of Computer Science at the University of Massachusetts, Boston, where he has taught classes on introductory programming and data structures. His research interests are in the fields of dynamical systems, complex networks, and evolutionary game theory.
Bahar Akbal-Delibas is a PhD student in the Department of Computer Science at the University of Massachusetts, Boston, where she is the teaching assistant for the compilers course. Her research interests include structural bioinformatics and software modeling.
"… a strong contribution to the … covers most standard compiler construction techniques well, and does a good job of exposing students to actual implementation environments. … Highly recommended. Upper-division undergraduates and above.
—C. Vickery, Queens College of CUNY in CHOICE Magazine"… an excellent book to use for individual study or in an upper-level undergraduate or first-year graduate course. No previous background in the theory of computation is needed, but a solid Java background is essential and some previous experience with programming languages (scope, stack allocation, types, and so on) would be useful. Knowledge of assembly language programming will be helpful if the course will include the chapters on register allocation and translating to MIPS."
—Computing Reviews, March 2014






