Compiler Construction Principles And Practice
Write a recursive descent parser for the calculator grammar:
Use depth-first search (DFS) to build a dominator tree. Loops become obvious: a node dominates all nodes in the loop body. Real compilers spend 90% of optimization time inside loops. compiler construction principles and practice
Use a hand-written lexer for simple languages; switch to flex when you have >20 token types. Write a recursive descent parser for the calculator
LOAD R1, [mem] ADD R2, R1, R3
In modern practice, very few people write a compiler from scratch. Instead, they use like LLVM . Use a hand-written lexer for simple languages; switch
Optimization requires knowing how data moves through the program. Reaching definitions , live variables , and available expressions are classic data-flow problems solved via iterations over control-flow graphs (CFGs).
Uses Context-Free Grammars (CFG), often expressed in Backus-Naur Form (BNF). Parsing Strategies: Top-Down (LL): Starts at the root and works down.