{"product_id":"compiler-construction-using-java-javacc-and-yacc-isbn-9780470949597","title":"Compiler Construction Using Java, JavaCC, and Yacc","description":"Broad in scope, involving theory, the application of that theory, and programming technology, compiler construction is a moving target, with constant advances in compiler technology taking place. Today, a renewed focus on do-it-yourself programming makes a quality textbook on compilers, that both students and instructors will enjoy using, of even more vital importance. This book covers every topic essential to learning compilers from the ground up and is accompanied by a powerful and flexible software package for evaluating projects, as well as several tutorials, well-defined projects, and test cases. \u003cp\u003ePreface xv\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 1 Strings, Languages, and Compilers 1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e1.1 Introduction 1\u003c\/p\u003e \u003cp\u003e1.2 Basic Language Concepts 1\u003c\/p\u003e \u003cp\u003e1.3 Basic Compiler Concepts 3\u003c\/p\u003e \u003cp\u003e1.4 Basic Set Theory 4\u003c\/p\u003e \u003cp\u003e1.5 Null String 6\u003c\/p\u003e \u003cp\u003e1.6 Concatenation 7\u003c\/p\u003e \u003cp\u003e1.7 Exponent Notation 7\u003c\/p\u003e \u003cp\u003e1.8 Star Operator 8\u003c\/p\u003e \u003cp\u003e1.9 Concatenation of Sets of Strings 9\u003c\/p\u003e \u003cp\u003e1.10 Plus Operator 11\u003c\/p\u003e \u003cp\u003e1.11 Question Mark Operator 11\u003c\/p\u003e \u003cp\u003e1.12 Shorthand Notation for a Set Containing a Single String 12\u003c\/p\u003e \u003cp\u003e1.13 Operator Precedence 12\u003c\/p\u003e \u003cp\u003e1.14 Regular Expressions 13\u003c\/p\u003e \u003cp\u003e1.15 Limitations of Regular Expressions 15\u003c\/p\u003e \u003cp\u003eProblems 16\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 2 Context-Free Grammars, Part 1 19\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e2.1 Introduction 19\u003c\/p\u003e \u003cp\u003e2.2 What is a Context-Free Grammar? 20\u003c\/p\u003e \u003cp\u003e2.3 Derivations Using a Context-Free Grammar 21\u003c\/p\u003e \u003cp\u003e2.4 Language Defined by a Context-Free Grammar 23\u003c\/p\u003e \u003cp\u003e2.5 Different Ways of Representing Contet-Free Grammars 25\u003c\/p\u003e \u003cp\u003e2.6 Some Simple Grammars 26\u003c\/p\u003e \u003cp\u003e2.7 Techniques for Generating Languages with Context-Free Grammars 29\u003c\/p\u003e \u003cp\u003e2.8 Regular and Right Linear Grammars 35\u003c\/p\u003e \u003cp\u003e2.9 Counting with Regular Grammars 37\u003c\/p\u003e \u003cp\u003e2.0 Grammars for Lists 39\u003c\/p\u003e \u003cp\u003e2.10 An Important Language that is Not Context Free 44\u003c\/p\u003e \u003cp\u003eProblems 45\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 3 Context-Free Grammars, Part 2 49\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e3.1 Introduction 49\u003c\/p\u003e \u003cp\u003e3.2 Parse Trees 49\u003c\/p\u003e \u003cp\u003e3.3 Leftmost and Rightmost Derivations 51\u003c\/p\u003e \u003cp\u003e3.4 Substitution 52\u003c\/p\u003e \u003cp\u003e3.5 Ambiguous Grammars 54\u003c\/p\u003e \u003cp\u003e3.6 Determining Nullable Nonterminals 59\u003c\/p\u003e \u003cp\u003e3.7 Eliminating Lambda Productions 60\u003c\/p\u003e \u003cp\u003e3.8 Eliminating Unit Productions 64\u003c\/p\u003e \u003cp\u003e3.9 Eliminating Useless Nonterminals 66\u003c\/p\u003e \u003cp\u003e3.10 Recursion Conversions 71\u003c\/p\u003e \u003cp\u003e3.11 Adding the Null String to a Language 76\u003c\/p\u003e \u003cp\u003eProblems 77\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 4 Context-Free Grammars, Part 3 83\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e4.1 Introduction 83\u003c\/p\u003e \u003cp\u003e4.2 Grammars for Arithmetic Expressions 83\u003c\/p\u003e \u003cp\u003e4.3 Specifying Associativity and Precedence in Grammars 90\u003c\/p\u003e \u003cp\u003e4.4 Backus-Naur Form 92\u003c\/p\u003e \u003cp\u003e4.5 Syntax Diagrams 94\u003c\/p\u003e \u003cp\u003e4.6 Abstract Syntax Trees and Three-Address Code 96\u003c\/p\u003e \u003cp\u003e4.7 Noncontracting Grammars 97\u003c\/p\u003e \u003cp\u003e4.8 Essentially Noncontracting Grammars 97\u003c\/p\u003e \u003cp\u003e4.9 Converting a Context-Free Grammar to an Essentially Noncontracting Grammar 98\u003c\/p\u003e \u003cp\u003e4.10 Pumping Property of Context-Free Languages 101\u003c\/p\u003e \u003cp\u003eProblems 104\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 5 Chomsky’s Hierarchy 107\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e5.1 Introduction 107\u003c\/p\u003e \u003cp\u003e5.2 Context-Sensitive Productions 107\u003c\/p\u003e \u003cp\u003e5.3 Context-Sensitive Grammars no\u003c\/p\u003e \u003cp\u003e5.4 Unrestricted Grammars 111\u003c\/p\u003e \u003cp\u003eProblems 112\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 6 Top-Down Parsing 115\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e6.1 Introduction 115\u003c\/p\u003e \u003cp\u003e6.2 Top-Down Construction of a Parse Tree 115\u003c\/p\u003e \u003cp\u003e6.3 Parses that Fail 117\u003c\/p\u003e \u003cp\u003e6.4 A Bad Grammar for Top-Down Parsing 118\u003c\/p\u003e \u003cp\u003e6.5 Deterministic Parsers 119\u003c\/p\u003e \u003cp\u003e6.6 A Parser that Uses a Stack 120\u003c\/p\u003e \u003cp\u003e6.7 Table Representation of a Stack Parser 124\u003c\/p\u003e \u003cp\u003e6.8 Handling Productions with Nonleading Terminal 126\u003c\/p\u003e \u003cp\u003e6.9 Writing a Stack Parser in Java 127\u003c\/p\u003e \u003cp\u003eProblems 134\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 7 LL(1) Grammars 137\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e7.1 Introduction 137\u003c\/p\u003e \u003cp\u003e7.2 FIRST Set of the Right Side of a Production 137\u003c\/p\u003e \u003cp\u003e7.3 Determining Operation Sequences 140\u003c\/p\u003e \u003cp\u003e7.4 Determining Selection Sets of Lambda Productions 142\u003c\/p\u003e \u003cp\u003e7.5 Whatever-Follows-Left-Follows-Rightmost Rule 145\u003c\/p\u003e \u003cp\u003e7.6 Selection Sets for Productions with Nullable Right Sides 147\u003c\/p\u003e \u003cp\u003e7.7 Selection Sets Containing End-of-Input Symbol 149\u003c\/p\u003e \u003cp\u003e7.8 A Stack Parser for a Grammar with Lambda Productions 152\u003c\/p\u003e \u003cp\u003e7.9 Converting a Non-LL( 1) Grammar to an LL( 1) Grammar 153\u003c\/p\u003e \u003cp\u003e7.10 Parsing with an Ambiguous Grammar 160\u003c\/p\u003e \u003cp\u003e7.11 Computing FIRST and FOLLOW Sets 163\u003c\/p\u003e \u003cp\u003eProblems 165\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 8 Table-Driven Stack Parser 171\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e8.1 Introduction 171\u003c\/p\u003e \u003cp\u003e8.2 Unifying the Operations of a Stack Parser 172\u003c\/p\u003e \u003cp\u003e8.3 Implementing a Table-Driven Stack Parser 175\u003c\/p\u003e \u003cp\u003e8.4 Improving Our Table-Driven Stack Parser 180\u003c\/p\u003e \u003cp\u003e8.5 Parsers that are Not Deterministic—A Digression on Theory 181\u003c\/p\u003e \u003cp\u003eProblems 183\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 9 Recursive-Descent Parsing 185\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e9.1 Introduction 185\u003c\/p\u003e \u003cp\u003e9.2 Simple Recursive-Descent Parser 185\u003c\/p\u003e \u003cp\u003e9.3 Handling Lambda Productions 192\u003c\/p\u003e \u003cp\u003e9.4 A Common Error 197\u003c\/p\u003e \u003cp\u003e9.5 Java Code for Productions 198\u003c\/p\u003e \u003cp\u003e9.6 Left Factoring in a Recursive-Descent Parser 199\u003c\/p\u003e \u003cp\u003e9.7 Eliminating Tail Recursion 204\u003c\/p\u003e \u003cp\u003e9.8 Translating the Star, Plus, and Question Mark Operators 108\u003c\/p\u003e \u003cp\u003e9.9 Doing Things Backward 210\u003c\/p\u003e \u003cp\u003eProblems 211\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 10 Recursive-Descent Translation 215\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e10.1 introduction 215\u003c\/p\u003e \u003cp\u003e10.2 A Simple Translation Grammar 215\u003c\/p\u003e \u003cp\u003e10.3 Converting a Translation Grammar to Java Code 217\u003c\/p\u003e \u003cp\u003e10.4 Specifications for a Translation Grammar 218\u003c\/p\u003e \u003cp\u003e10.5 Passing Information During a Parse 231\u003c\/p\u003e \u003cp\u003e10.6 L-Attributed Grammars 236\u003c\/p\u003e \u003cp\u003e10.7 New Token Manager 238\u003c\/p\u003e \u003cp\u003e10.8 Solving the Token Lookahead Problem 241\u003c\/p\u003e \u003cp\u003e10.9 Code for the New Token Manager 241\u003c\/p\u003e \u003cp\u003e10.10 Translation Grammar for Prefix Expression Compiler 253\u003c\/p\u003e \u003cp\u003e10.11 An Interesting Use of Recursion 257\u003c\/p\u003e \u003cp\u003eProblems 261\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 11 Assembly Language 265\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e11.1 Introduction 265\u003c\/p\u003e \u003cp\u003e11.2 Structure of the J1 Computer 265\u003c\/p\u003e \u003cp\u003e11.3 Machine Language Instructions 266\u003c\/p\u003e \u003cp\u003e11.4 Assembly Language Instructions 268\u003c\/p\u003e \u003cp\u003e11.5 Pushing Characters 269\u003c\/p\u003e \u003cp\u003e11.6 aout Instruction 270\u003c\/p\u003e \u003cp\u003e11.7 Using Labels 270\u003c\/p\u003e \u003cp\u003e11.8 Using the Assembler 272\u003c\/p\u003e \u003cp\u003e11.9 stav Instruction 275\u003c\/p\u003e \u003cp\u003e11.10 Compiling an Assignment Statement 277\u003c\/p\u003e \u003cp\u003e11.11 Compiling print and printin 280\u003c\/p\u003e \u003cp\u003e11.12 Outputting Strings 28,\u003c\/p\u003e \u003cp\u003e11.13 Inputting Decimal Numbers 283\u003c\/p\u003e \u003cp\u003e11.14 Entry Directive 284\u003c\/p\u003e \u003cp\u003e11.15 More Assembly Language 285\u003c\/p\u003e \u003cp\u003eProblems 285\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 12 SI—A Simple Compiler 289\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e12.1 Introduction 289\u003c\/p\u003e \u003cp\u003e12.2 The Source Language 289\u003c\/p\u003e \u003cp\u003e12.3 Grammar for Source Language 290\u003c\/p\u003e \u003cp\u003e12.4 The Target Language 291\u003c\/p\u003e \u003cp\u003e12.5 Symbol Table 292\u003c\/p\u003e \u003cp\u003e12.6 Code Generator 293\u003c\/p\u003e \u003cp\u003e12.7 Token Class 293\u003c\/p\u003e \u003cp\u003e12.8 Writing the Translation Grammar 294\u003c\/p\u003e \u003cp\u003e12.9 Implementing the SI Compiler 299\u003c\/p\u003e \u003cp\u003e12.10 Trying Out SI 315\u003c\/p\u003e \u003cp\u003e12.11 Advice on Extending the SI Compiler 318\u003c\/p\u003e \u003cp\u003e12.12 Specifications for S2 320\u003c\/p\u003e \u003cp\u003eProblems 324\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 13 JavaCC 331\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e13.1 Introduction 331\u003c\/p\u003e \u003cp\u003e13.2 JavaCC Extended Regular Expressions 333\u003c\/p\u003e \u003cp\u003e13.3 JavaCC Input File 337\u003c\/p\u003e \u003cp\u003e13.4 Specifying Actions for Regular Expressions 344\u003c\/p\u003e \u003cp\u003e13.5 JavaCC Input File for Slj 348\u003c\/p\u003e \u003cp\u003e13.6 Files Produced by JavaCC 355\u003c\/p\u003e \u003cp\u003e13.7 Using the Star and Plus Operators 359\u003c\/p\u003e \u003cp\u003e13.8 Choice Points and the Lookahead Directive 362\u003c\/p\u003e \u003cp\u003e13.9 JavaCC’s Choice Algorithm 367\u003c\/p\u003e \u003cp\u003e13.10 Syntactic and Semantic Lookahead 371\u003c\/p\u003e \u003cp\u003e13.11 Using JavaCC to Create a Token Manager Only 372\u003c\/p\u003e \u003cp\u003e13.12 Using the Token Chain 373\u003c\/p\u003e \u003cp\u003e13.13 Suppressing Warning Messages 377\u003c\/p\u003e \u003cp\u003eProblems 387\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 14 Building on S2 383\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e14.1 Introduction 383\u003c\/p\u003e \u003cp\u003e14.2 Extending println and print 383\u003c\/p\u003e \u003cp\u003e14.3 Cascaded Assignment Statement 388\u003c\/p\u003e \u003cp\u003e14.4 Unary Plus and Minus 313\u003c\/p\u003e \u003cp\u003e14.5 readint Statement 393\u003c\/p\u003e \u003cp\u003e14.6 Controlling the Token Trace from the Command Line 395\u003c\/p\u003e \u003cp\u003e14.7 Specifications for S3 396\u003c\/p\u003e \u003cp\u003eProblems 396\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 15 Compiling Control Structures 399\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e15.1 Introduction 399\u003c\/p\u003e \u003cp\u003e15.2 while Statement 399\u003c\/p\u003e \u003cp\u003e15.3 if Statement 403\u003c\/p\u003e \u003cp\u003e15.4 do-while Statement 407\u003c\/p\u003e \u003cp\u003e15.5 Range Checking of Numerical Constants 408\u003c\/p\u003e \u003cp\u003e15.6 Handling Backslash-Quote in a String 410\u003c\/p\u003e \u003cp\u003e15.7 Handling Backslash-Quote with JavaCC 411\u003c\/p\u003e \u003cp\u003e15.8 Universal Blocks in JavaCC 416\u003c\/p\u003e \u003cp\u003e15.9 Handling Strings that Span Lines 418\u003c\/p\u003e \u003cp\u003e15.10 Handling Strings that Span Lines Using JavaCC 419\u003c\/p\u003e \u003cp\u003e15.11 SPECIAL_TOKEN Block in JavaCC 422\u003c\/p\u003e \u003cp\u003e15.12 Error Recovery 424\u003c\/p\u003e \u003cp\u003e15.13 Error Recovery in JavaCC 429\u003c\/p\u003e \u003cp\u003e15.14 Specifications for S4 430\u003c\/p\u003e \u003cp\u003eProblems 431\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 16 Compiling Programs in Functional Form 435\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e16.1 Introduction 435\u003c\/p\u003e \u003cp\u003e16.2 Separate Assembly and Linking 435\u003c\/p\u003e \u003cp\u003e16.3 Calling and Returning from Fuctions 439\u003c\/p\u003e \u003cp\u003e16.4 Source Language for S5 443\u003c\/p\u003e \u003cp\u003e16.5 Symbol Table for S5 445\u003c\/p\u003e \u003cp\u003e16.6 Code Generator for S5 446\u003c\/p\u003e \u003cp\u003e16.7 Translation Grammar forS5 447\u003c\/p\u003e \u003cp\u003e16.8 Linking with a Library 457\u003c\/p\u003e \u003cp\u003e16.9 Specifications for S5 458\u003c\/p\u003e \u003cp\u003e16.10 Extending S5 458\u003c\/p\u003e \u003cp\u003eProblems 461\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 17 Finite Automata 465\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e17.1 Introduction 465\u003c\/p\u003e \u003cp\u003e17.2 Deterministic Finite Automata 466\u003c\/p\u003e \u003cp\u003e17.3 Converting a DFA to a Regular Expression 468\u003c\/p\u003e \u003cp\u003e17.4 Java Code for a DFA 472\u003c\/p\u003e \u003cp\u003e17.5 Nondeterministic Finite Automata 474\u003c\/p\u003e \u003cp\u003e17.6 Using an NFA as an Algorithm 476\u003c\/p\u003e \u003cp\u003e17.7 Converting an NFA to a DFA with the Subset Algorithm 478\u003c\/p\u003e \u003cp\u003e17.8 Converting a DFA to a Regular Grammar 479\u003c\/p\u003e \u003cp\u003e17.9 Converting a Regular Grammar to an NFA 482 \u003c\/p\u003e \u003cp\u003e17.10 Converting a Regular Expression to an NF A 484\u003c\/p\u003e \u003cp\u003e17.11 Finding the Minimal DFA 488\u003c\/p\u003e \u003cp\u003e17.12 Pumping Property of Regular Languages 493\u003c\/p\u003e \u003cp\u003eProblems 495\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 18 Capstone Project: Implementing Grep Using Compiler Technology 499\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e18.1 Introduction 499\u003c\/p\u003e \u003cp\u003e18.2 Regular Expressions for Our Grep Program 501\u003c\/p\u003e \u003cp\u003e18.3 Token Manager for Regular Expression 501\u003c\/p\u003e \u003cp\u003e18.4 Grammar for Regular Expressions 503\u003c\/p\u003e \u003cp\u003e18.5 Target Language for Our Regular Expression Compiler 503\u003c\/p\u003e \u003cp\u003e18.6 Using an NFA for Pattern Matching 508\u003c\/p\u003e \u003cp\u003eProblems 513\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 19 Compiling to a Register-Oriented Architecture 515\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e19.1 Introduction 515\u003c\/p\u003e \u003cp\u003e19.2 Using the Register Instruction Set 516\u003c\/p\u003e \u003cp\u003e19.3 Modifications to the Symbol Table for R1 517\u003c\/p\u003e \u003cp\u003e19.4 Parser and Code Generator for R1 518\u003c\/p\u003e \u003cp\u003eProblems 526\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 20 Optimization 529\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e20.1 Introduction 529\u003c\/p\u003e \u003cp\u003e20.2 Using the ldc Instruction 531\u003c\/p\u003e \u003cp\u003e20.3 Reusing Temporary Variables 532\u003c\/p\u003e \u003cp\u003e20.4 Constant Folding 535\u003c\/p\u003e \u003cp\u003e20.5 Register Allocation 537\u003c\/p\u003e \u003cp\u003e20.6 Peephole Optimization 540\u003c\/p\u003e \u003cp\u003eProblems 543\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 21 Interpreters 547\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e21.1 Introduction 547\u003c\/p\u003e \u003cp\u003e21.2 Converting SI to 11 549\u003c\/p\u003e \u003cp\u003e21.3 Interpreting Statements that Transfer Control 552\u003c\/p\u003e \u003cp\u003e21.4 Implementing the Compiler-Interpreter Cl 1 553\u003c\/p\u003e \u003cp\u003e21.5 Advantages of Interpreters 558\u003c\/p\u003e \u003cp\u003eProblems 559\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 22 Bottom-Up Parsing 561\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e22.1 Introduction 561\u003c\/p\u003e \u003cp\u003e22.2 Principles of Bottom-Up Parsing 561\u003c\/p\u003e \u003cp\u003e22.3 Parsing with Right- versus Left-Recursive Grammars 565\u003c\/p\u003e \u003cp\u003e22.4 Bottom-Up Parsing with an Ambiguous Grammar 566\u003c\/p\u003e \u003cp\u003e22.5 Do-Not-Reduce Rule 569\u003c\/p\u003e \u003cp\u003e22.6 SLR(l) Parsing 570\u003c\/p\u003e \u003cp\u003e22.7 Shift\/Reduce Conflicts 577\u003c\/p\u003e \u003cp\u003e22.8 Reduce\/Reduce Conflicts 579\u003c\/p\u003e \u003cp\u003e22.9 LR(1) Parsing 579\u003c\/p\u003e \u003cp\u003eProblems 584\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 23 yacc 587\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e23.1 Introduction 587\u003c\/p\u003e \u003cp\u003e23.2 yacc Input and Output Files 587\u003c\/p\u003e \u003cp\u003e23.3 A Simple yacc-Generated Parser 588\u003c\/p\u003e \u003cp\u003e23.4 Passing Values Using the Value Stack 596\u003c\/p\u003e \u003cp\u003e23.5 Using yacc With an Ambiguous Grammar 602\u003c\/p\u003e \u003cp\u003e23.6 Passing Values down the Parse Tree 604\u003c\/p\u003e \u003cp\u003e23.7 Implementing Sly 606\u003c\/p\u003e \u003cp\u003e23.8 jflex 612\u003c\/p\u003e \u003cp\u003eProblems 618\u003c\/p\u003e \u003cp\u003eAppendix A Stack Instruction Set 621\u003c\/p\u003e \u003cp\u003eAppendix B Register Instruction Set 625\u003c\/p\u003e \u003cp\u003eReferences 629\u003c\/p\u003e \u003cp\u003eIndex\u003c\/p\u003e  \"Compiler Construction Using Java, JavaCC, and Yacc covers every topic essential to learning compilers from the ground up and is accompanied by a powerful and flexible software package for evaluating projects, as well as several tutorials, well-defined projects, and test cases.\" (Ulitzer, 5 December 2011)  \u003cp\u003e \u003c\/p\u003e \t \u003cp\u003e\u003cb\u003eANTHONY J. DOS REIS\u003c\/b\u003e is Associate Professor of Computer Science at the State University of New York at New Paltz. Before becoming a professor, Dr. Dos Reis worked at IBM as a systems programmer, creating IBM operating systems and compilers. His teaching interests include computer engineering, program translation, Java, and formal languages.   \u003c\/p\u003e\u003cp\u003e\u003cb\u003eA student-friendly, course-friendly guide to compiler theory, applications, and programming technology\u003c\/b\u003e  \u003c\/p\u003e\u003cp\u003eCompiler construction is a tricky subject, involving theory, the application of that theory, and programming technology. Virtually every day, advances in computer technology propel advances in compiler technology. Compiler Construction Using Java\u003csup\u003e™\u003c\/sup\u003e, JavaCC, and Yacc covers every topic essential to learning compilers from the ground up and is accompanied by a powerful and flexible software package for evaluating projects as well as several tutorials, well-defined projects, and test cases. While the coverage of JavaCC is entirely optional, this book provides the only comprehensive introduction to the topic currently available.  \u003c\/p\u003e\u003cp\u003eFar easier to read and understand than any other compiler guide, this book sets a new standard for learning this invaluable skill. It provides: \u003c\/p\u003e\u003cul\u003e \u003cli\u003eStrong coverage of formal languages, including context-sensitive and unrestricted languages as well as regular and context-free languages\u003c\/li\u003e \u003cli\u003eA clear exposition of compiler design and implementation theory\u003c\/li\u003e \u003cli\u003eNumerous well-defined projects, using source language with six levels of complexity\u003c\/li\u003e \u003cli\u003eA complete teaching support software package that evaluates compiler projects for correctness, run time, and size of code, and runs on multiple platforms\u003c\/li\u003e \u003cli\u003eImmediate feedback for students on their projects\u003c\/li\u003e \u003c\/ul\u003e \u003cp\u003eCompiler Construction Using Java\u003csup\u003e™\u003c\/sup\u003e, JavaCC, and Yacc provides substantial support for each project, many of which are incremental enhancements of previous projects. The goals at each new level are challenging but achievable and can be reached in several different ways, for example, by writing a compiler or interpreter by hand, with JavaCC, or with Yacc.\u003c\/p\u003e","brand":"Wiley-IEEE Computer Society Pr","offers":[{"title":"Default Title","offer_id":47988958593253,"sku":"NP9780470949597","price":122.95,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1842\/7735\/files\/9780470949597.jpg?v=1761782210","url":"https:\/\/k12savings.com\/products\/compiler-construction-using-java-javacc-and-yacc-isbn-9780470949597","provider":"K12savings","version":"1.0","type":"link"}