( Each chapter contains "Exercises".) <br> <strong>Introduction.</strong> <br> <p>Overview and History.</p> <p>What Do Compilers Do?</p> <p>The Structure of a Compiler.</p> <p>The Syntax and Semantics of Programming Languages.</p> <p>Compiler Design and Programming Language Design.</p> <p>Compiler Classifications.</p> <p>Influences On Computer Design.</p> <p>Exercises.</p> <p> <br> <strong>A Simple Compiler.</strong> <br></p> <p>The Structure of a Micro Compiler.</p> <p>A Micro Scanner.</p> <p>The Syntax of Micro.</p> <p>Recursive Descent Parsing.</p> <p>Translating Micro.</p> <p>Exercises.</p> <p> <br> <strong>Scanning--Theory and Practice.</strong> <br></p> <p>Overview.</p> <p>Regular Expressions.</p> <p>Finite Automata and Scanners.</p> <p>Using a Scanner Generator.</p> <p>Practical Considerations.</p> <p>Translating Regular Expressions Into Finite Automata.</p> <p>Exercises.</p> <p> <br> <strong>Grammars and Parsing.</strong> <br></p> <p>Context-Free Grammars: Concepts and Notation.</p> <p>Errors in Context-Free Grammars.</p> <p>Transforming Extended Bnf Grammars.</p> <p>Parsers and Recognizers.</p> <p>Grammar Analysis Algorithms.</p> <p>Exercises.</p> <p> <br> <strong>Ll(1) Grammars and Parsers.</strong> <br></p> <p>The Ll(1) Predict Function.</p> <p>The Ll(1) Parse Table.</p> <p>Building Recursive Descent Parsers From Ll(1) Tables.</p> <p>An Ll(1) Parser Driver.</p> <p>Ll(1) Action Symbols.</p> <p>Making Grammars Ll(1) / The If-Then-Else Problem in Ll(1) Parsing.</p> <p>The Llgen Parser Generator.</p> <p>Properties of Ll(1) Parsers.</p> <p>Ll(K) Parsing.</p> <p>Exercises.</p> <p> <br> <strong>Lr Parsing.</strong> <br></p> <p>Shift-Reduce Parsers.</p> <p>Lr Parsers.</p> <p>Lr(1) Parsing.</p> <p>Slr(1) Parsing.</p> <p>Lalr(1).</p> <p>Calling Semantic Routines in Shift-Reduce Parsers.</p> <p>Using a Parser Generator.</p> <p>Optimizing Parse Tables.</p> <p>Practical Lr(1) Parsers.</p> <p>Properties of Lr Parsers.</p> <p>Ll(1) Or Lalr(1), That Is The Question.</p> <p>Other Shift-Reduce Techniques.</p> <p>Exercises.</p> <p> <br> <strong>Semantic Processing.</strong> <br></p> <p>Syntax-Directed Translation.</p> <p>Semantic Processing Techniques.</p> <p>Intermediate Representations and Code Generation.</p> <p>Exercises.</p> <p> <br> <strong>Symbol Tables.</strong> <br></p> <p>A Symbol Table Interface.</p> <p>Basic Implementation Techniques.</p> <p>Block-Structured Symbol Tables.</p> <p>Extensions to Block-Structured Symbol Tables.</p> <p>Implicit Declarations.</p> <p>Overloading.</p> <p>Forward References.</p> <p>Summary.</p> <p>Exercises.</p> <p> <br> <strong>Run-Time Storage Organization.</strong> <br></p> <p>Static Allocation.</p> <p>Stack Allocation.</p> <p>Heap Allocation.</p> <p>Program Layout in Memory.</p> <p>Static and Dynamic Chains.</p> <p>Formal Procedures.</p> <p>Exercises.</p> <p> <br> <strong>Processing Declarations.</strong> <br></p> <p>Declaration Processing Fundamentals.</p> <p>Action Routines for Simple Declarations.</p> <p>Action Routines for Advanced Features.</p> <p>Exercises.</p> <p> <br> <strong>Processing Expressions and Data Structure References.</strong> <br></p> <p>Introduction.</p> <p>Action Routines for Simple Names, Expressions, and Data Structures.</p> <p>Action Routines for Advanced Features.</p> <p>Exercises.</p> <p> <br> <strong>Translating Control Structures.</strong> <br></p> <p>If Statements.</p> <p>Loops.</p> <p>Compiling Exits.</p> <p>The Case Statement.</p> <p>Compiling Goto Statements.</p> <p>Exception Handling.</p> <p>Short-Circuit Boolean Expressions.</p> <p>Exercises.</p> <p> <br> <strong>Translating Procedures and Functions.</strong> <br></p> <p>Simple Subprograms.</p> <p>Passing Parameters to Subprograms.</p> <p>Processing Subprogram Calls and Parameter Lists.</p> <p>Subprogram Invocation.</p> <p>Label Parameters.</p> <p>Name Parameters.</p> <p>Exercises.</p> <p> <br> <strong>Attribute Grammars and Multipass Translation.</strong> <br></p> <p>Attribute Grammars.</p> <p>Tree-Structured Intermediate Representations.</p> <p>Exercises.</p> <p> <br> <strong>Code Generation and Local Code Optimization.</strong> <br></p> <p>An Overview.</p> <p>Register and Temporary Management.</p> <p>A Simple Code Generator.</p> <p>Interpretive Code Generation.</p> <p>Peephole Optimization.</p> <p>Generating Code From Trees.</p> <p>Generating Code From Dags.</p> <p>Code Generator Generators.</p> <p>Exercises.</p> <p> <br> <strong>Global Optimization.</strong> <br></p> <p>An Overview: Goals and Limits.</p> <p>Optimizing Subprogram Calls.</p> <p>Loop Optimization.</p> <p>Global Data Flow Analysis.</p> <p>Putting it All Together.</p> <p>Exercises.</p> <p> <br> <strong>Parsing in The Real World.</strong> <br></p> <p>Compacting Tables.</p> <p>Syntactic Error Recovery and Repair.</p> <p>Exercises.</p> <p> <br> <strong>Appendices.</strong> <br></p> <p>A. Definition of Ada/Cs.</p> <p>B. Scangen.</p> <p>C. Llgen User Manual.</p> <p>D. Lalrgen User Manual.</p> <p>E. Error-Repair Features of Llgen and Lalrgen.</p> <p>F. Compiler Development Utilities.</p> <p> <br> <strong>Bibliography.</strong> <br></p> <p>Index. 0805321667T04062001</p>