Additional Information
Book Details
Abstract
A compiler is a special program that processes statements in a particular programming language and turns them into machine code that the computer can understand.
Compiling with C# and Java is an introduction to compiler construction using the Java Virtual Machine (JVM) and .NET Common Language Routine (CLR), both of which provide the interface between compiler, C# or Java code, and hardware.
Loaded with exercises, examples and case studies, the text balances theory and practice to provide the reader with a solid working knowledge of the subject.
Table of Contents
| Section Title | Page | Action | Price |
|---|---|---|---|
| Cover | Cover | ||
| Compiling with C | i | ||
| Contents | v | ||
| Preface | xiv | ||
| Acknowledgements | xix | ||
| Translators and Languages | 1 | ||
| Objectives | 1 | ||
| Systems programs and translators | 2 | ||
| The benefits of using high-level languages | 4 | ||
| The curse of complexity | 7 | ||
| Successful language design | 8 | ||
| The benefits of formal description | 10 | ||
| Translator Classification and Structure | 12 | ||
| T-diagrams | 13 | ||
| Classes of translator | 14 | ||
| Linkers and loaders | 16 | ||
| Phases in translation | 17 | ||
| Multi-stage translators | 25 | ||
| Interpreters, interpretive compilers and emulators | 27 | ||
| The P-system and the JVM | 30 | ||
| JIT compilers and the .NET Framework | 32 | ||
| Compiler Development and Bootstrapping | 35 | ||
| Using a high-level translator | 35 | ||
| Using a high-level host language | 37 | ||
| Bootstrapping | 37 | ||
| Self-compiling compilers | 38 | ||
| The half bootstrap | 39 | ||
| Bootstrapping from a portable interpretive compiler | 40 | ||
| A P-code assembler | 42 | ||
| The use of compiler generating tools | 43 | ||
| Stack Machines | 44 | ||
| Simple machine architecture | 44 | ||
| Assembler languages | 47 | ||
| Addressing modes | 48 | ||
| The PVM – a simple stack machine | 51 | ||
| Programming the PVM | 56 | ||
| An emulator for the PVM | 61 | ||
| A minimal assembler for PVM code | 66 | ||
| Enhancing the efficiency of the emulator | 69 | ||
| Error handling in the PVM | 70 | ||
| Enhancing the instruction set of the PVM | 75 | ||
| Another stack machine – the JVM | 80 | ||
| The CLR – a conceptual stack machine | 82 | ||
| Language Specification | 84 | ||
| Syntax, semantics and pragmatics | 84 | ||
| Languages, symbols, alphabets and strings | 86 | ||
| Regular expressions | 87 | ||
| Grammars and productions | 91 | ||
| Classic BNF notation for productions | 95 | ||
| Simple examples | 96 | ||
| Phrase structure and lexical structure | 101 | ||
| e-productions | 101 | ||
| Extensions to BNF | 102 | ||
| Syntax diagrams | 116 | ||
| Formal treatment of semantics | 117 | ||
| Development and Classification of Grammars | 123 | ||
| Equivalent grammars | 123 | ||
| Case study – equivalent grammars for describing expressions | 124 | ||
| Some simple restrictions on grammars | 129 | ||
| Ambiguous grammars | 131 | ||
| The Chomsky hierarchy | 135 | ||
| Parser and Scanner Construction | 172 | ||
| Construction of simple recursivev descent parsers | 172 | ||
| Case study – a parser for assignment sequences | 175 | ||
| Other aspects of recursive descent parsing | 179 | ||
| Syntax error detection and recovery | 185 | ||
| Construction of simple scanners | 194 | ||
| Case study – a scanner for Boolean assignments | 195 | ||
| Keywords and literals | 204 | ||
| Comment handling | 208 | ||
| LR parsing | 211 | ||
| Automated construction of scanners and parsers | 216 | ||
| Syntax-directed Translation | 219 | ||
| Embedding semantic actions into syntax rules | 219 | ||
| Attribute grammars | 223 | ||
| Synthesized and inherited attributes | 227 | ||
| Classes of attribute grammars | 232 | ||
| Case study – a small database for a group of students | 233 | ||
| Using Coco/R: Overview | 238 | ||
| Coco/R – a brief history | 238 | ||
| Installing and running Coco/R | 239 | ||
| Case study – a simple adding machine | 242 | ||
| Overall form of a Cocol description | 243 | ||
| Scanner specification | 244 | ||
| Parser specification | 251 | ||
| The driver program | 267 | ||
| Using Coco/R: Case Studies | 270 | ||
| Case study – understanding C declarations | 270 | ||
| Case study – generating simple two-address code from expressions | 273 | ||
| Case study – generating two-address code from an AST | 277 | ||
| Case study – manipulating EBNF productions | 284 | ||
| Case study – a simple assembler for the PVM | 287 | ||
| Further projects | 295 | ||
| A Parva Compiler: the Front End | 307 | ||
| Overall compiler structure | 308 | ||
| File handling | 309 | ||
| Error reporting | 310 | ||
| Scanning and parsing | 310 | ||
| Syntax error recovery | 311 | ||
| Constraint analysis | 311 | ||
| Further projects | 326 | ||
| A Parva Compiler: the Back End | 343 | ||
| Extending the symbol table entries | 344 | ||
| The code generation interface | 347 | ||
| Using the code generation interface | 349 | ||
| Code generation for the PVM | 359 | ||
| Towards greater efficiency | 363 | ||
| Other aspects of code generation | 372 | ||
| Further projects | 380 | ||
| A Parva Compiler: Functions and Parameters | 391 | ||
| Source language extensions | 391 | ||
| Constraint analysis | 395 | ||
| Run-time storage management | 398 | ||
| Putting it all together | 407 | ||
| Mutually recursive functions | 419 | ||
| Nested functions | 420 | ||
| Heap management | 433 | ||
| Further projects | 438 | ||
| A C | 445 | ||
| The source language – C | 446 | ||
| The target language | 446 | ||
| The symbol table | 457 | ||
| Abstract syntax design | 467 | ||
| Abstract syntax tree construction | 475 | ||
| Parsing declarations | 489 | ||
| Further projects | 500 | ||
| A C | 502 | ||
| Single-pass compiler strategy | 503 | ||
| Generating code for statements from an abstract syntax tree | 504 | ||
| Generating code for expressionsf rom an abstract syntax tree | 515 | ||
| Low-level code generation – the CodeGen class | 533 | ||
| The OpCode class | 536 | ||
| Tracking the depth of stack | 537 | ||
| Generating the directives | 541 | ||
| Further projects | 544 | ||
| Appendix A: Assembler programmer’s guide to the PVM, JVM and CLR virtual machines | 549 | ||
| Fundamental types | 549 | ||
| Instruction sets | 551 | ||
| Assembler directives | 568 | ||
| Appendix B: Library routines | 572 | ||
| Appendix C: Context-free grammars and I/O facilities for Parva and C | 578 | ||
| Appendix D: Software resources for this book | 584 | ||
| The Resource Kit | 584 | ||
| Coco/R distributions | 585 | ||
| Other compiler tools, free compilers and similar resources | 586 | ||
| Disclaimer | 588 | ||
| Bibliography | 590 | ||
| Index | 596 |