A Retargetable C Compiler: Design and Implementation

A Retargetable C Compiler: Design and Implementation

by David R. Hanson
     
 

ISBN-10: 0805316701

ISBN-13: 9780805316704

Pub. Date: 01/31/1995

Publisher: Addison-Wesley

This new text examines the design and implementation of lcc , a production-quality, retargetable compiler for the ANSI C programming language, designed at AT&T Bell Laboratories and Princeton University. The authors' innovative approach--a "literate program" that intermingles the text with the source code--gives a detailed tour of the code that explains the

Overview

This new text examines the design and implementation of lcc , a production-quality, retargetable compiler for the ANSI C programming language, designed at AT&T Bell Laboratories and Princeton University. The authors' innovative approach--a "literate program" that intermingles the text with the source code--gives a detailed tour of the code that explains the implementation and design decisions reflected in the software. And while most books describe toy compilers or focus on isolated pieces of code, the authors provide the entire source code for a real compiler, which is available via ftp. Structured as a self-study guide that describes the real-world tradeoffs encountered in building a production-quality compiler, this book is useful to individuals who work in application areas applying or creating language-based tools and techniques.

  • Explores the interaction between compiler theory and practice through the discussion of lcc.
  • Covers compiler theory only as needed to understand the implementation of lcc, focusing instead on practical, applied issues.
  • Encourages a broader understanding of programming in C through an examination of lcc, a production-quality compiler in use since 1988.
  • Provides full code generators for the MIPS R3000, SPARC, and Intel 80x86 architectures and successors.
  • The full source code for the lcc compiler, the three back ends, and the code-generator generator is freely available.
  • Uses icons and brief indices in the margins to cross- reference code fragments and connect code usage.
Audience

Senior undergraduate or graduate level second course. Any researcher or implementer of compilers for parallel or advanced computers.

0805316701B04062001

Product Details

ISBN-13:
9780805316704
Publisher:
Addison-Wesley
Publication date:
01/31/1995
Edition description:
New Edition
Pages:
592
Product dimensions:
7.00(w) x 9.00(h) x 1.30(d)

Table of Contents

Preface.

1. Introduction.

Literate Programs.

How to Read This Book.

Overview.

Design.

Common Declarations.

Syntax Specifications.

Errors.

2. Storage Management.

Memory Management Interface.

Arena Representation.

Allocating Space.

Deallocating Space.

Strings.

3. Types.

Representing Symbols.

Representing Symbol Tables.

Changing Scope.

Finding and Installing Identifiers.

Labels.

Constants.

Generated Variables.

4. Code Generation Interface.

Representing Types.

Type Management.

Type Predicates.

Type Constructors.

Function Types.

Structure and Enumeration Types.

Type-Checking Functions.

Type Mapping.

5. Lexical Analysis.

Type Metrics.

Interface Records.

Symbols.

Types.

Dag Operators.

Interface Flags.

Initialization.

Definitions.

Constants.

Functions.

Interface Binding.

Upcalls.

6. Parsing.

Input.

Recognizing Tokens.

Recognizing Keywords.

Recognizing Identifiers.

Recognizing Numbers.

Recognizing Character Constants and Strings.

7. Expressions.

Languages and Grammars.

Ambiguity and Parse Trees.

Top-Down Parsing.

FIRST and FOLLOW Sets.

Writing Parsing Functions.

Handling Syntax Errors.

8. Expression Semantics.

Representing Expressions.

Parsing Expressions.

Parsing C Expressions.

Assignment Expressions.

Conditional Expressions.

Binary Expressions.

Unary and Postfix Expressions.

Primary Expressions.

9. Expression Semantics.

Conversions.

Unary and Postfix Operators.

Function Calls.

Binary Operators.

Assignments.

Conditionals.

Constant Folding.

10. Statements.

Representing Code.

Execution Points.

Recognizing Statements.

If Statements.

Labels and Gotos.

Loops.

Switch Statements.

Return Statements.

Managing Labels and Jumps.

11. Declarations.

Translation Units.

Declarations.

Declarators.

Function Declarators.

Structure Specifiers.

Function Definitions.

Compound Statements.

Finalization.

The Main Program.

12. Generating Immediate Code.

Eliminating Common Subexpressions.

Building Nodes.

Flow of Control.

Assignments.

Function Calls.

Enforcing Evaluation Order.

Driving Code Generation.

Eliminating Multiply Referenced Nodes.

13. Structuring the Code Generator.

Organization of the Code Generator.

Interface Extensions.

Upcalls.

Node Extensions.

Symbol Extensions.

Frame Layout.

Generating Code to Copy Blocks.

Initialization.

14. Selecting and Emitting instructions.

Specifications.

Labelling the Tree.

Reducing the Tree.

Cost Functions.

Debugging.

The Emitter.

Register Targeting.

Coordinating Instruction Selection.

Shared Rules.

15. Register Allocation.

Organization.

Tracking the Register State.

Allocating Registers.

Spilling.

16. Generating MIPS R3000 Code.

Registers.

Selecting Instructions.

Implementing Functions.

Defining Data.

Segments.

Copying Blocks.

17. Generating SPARC Code.

Registers.

Selecting Instructions.

Implementing Functions.

Defining Data.

Copying Blocks.

18. Generating X86 Code.

Registers.

Selecting Instructions.

Implementing Functions.

Defining Data.

19. Retrospective.

Data Structures.

Interface.

Syntactic and Semantic Analyses.

Code Generation and Optimization.

Testing and Validation.

Bibliography.

Index.

How to Obtain ICC. 0805316701T04062001

Customer Reviews

Average Review:

Write a Review

and post it to your social network

     

Most Helpful Customer Reviews

See all customer reviews >