Book description
Compilers are at the heart of everything programmers do, yet even experienced developers find them intimidating. For those eager to truly grasp how compilers work, Writing a C Compiler dispels the mystery. This book guides you through a fun and engaging project where you’ll learn what it takes to compile a real-world programming language to actual assembly code.
Writing a C Compiler will take you step by step through the process of building your own compiler for a significant subset of C—no prior experience with compiler construction or assembly code needed. Once you’ve built a working compiler for the simplest C program, you’ll add new features chapter by chapter. The algorithms in the book are all in pseudocode, so you can implement your compiler in whatever language you like. Along the way, you’ll explore key concepts like:
- Lexing and parsing: Learn how to write a lexer and recursive descent parser that transform C code into an abstract syntax tree.
- Program analysis: Discover how to analyze a program to understand its behavior and detect errors.
- Code generation: Learn how to translate C language constructs like arithmetic operations, function calls, and control-flow statements into x64 assembly code.
- Optimization techniques: Improve performance with methods like constant folding, dead store elimination, and register allocation.
Compilers aren’t terrifying beasts—and with help from this hands-on, accessible guide, you might even turn them into your friends for life.
Publisher resources
Table of contents
- Title Page
- Copyright
- Dedication
- About the Author and the Technical Reviewer
- Acknowledgments
- Introduction
-
Part I: The Basics
- 1. A Minimal Compiler
- 2. Unary Operators
- 3. Binary Operators
- 4. Logical and Relational Operators
- 5. Local Variables
- 6. If Statements and Conditional Expressions
- 7. Compound Statements
- 8. Loops
- 9. Functions
- 10. File Scope Variable Declarations and Storage-Class Specifiers
-
Part II: Types Beyond Int
- 11. Long Integers
- 12. Unsigned Integers
- 13. Floating-Point Numbers
- 14. Pointers
- 15. Arrays and Pointer Arithmetic
- 16. Characters and Strings
- 17. Supporting Dynamic Memory Allocation
- 18. Structures
-
Part III: Optimizations
- 19. Optimizing Tacky Programs
- 20. Register Allocation
- Next Steps
- Appendix A. Debugging Assembly Code With GDB or LLDB
- Appendix B. Assembly Generation and Code Emission Tables
- References
- Index
Product information
- Title: Writing a C Compiler
- Author(s):
- Release date: August 2024
- Publisher(s): No Starch Press
- ISBN: 9781718500426
You might also like
book
C Programming Language, 2nd Edition
This book is meant to help the reader learn how to program in C. It is …
book
C++ Software Design
Good software design is essential for the success of your project, but designing software is hard …
book
Extreme C
Push the limits of what C - and you - can do, with this high-intensity guide …
book
Effective Modern C++
Coming to grips with C++11 and C++14 is more than a matter of familiarizing yourself with …