Compiler construction is a part of practical computer science that includes
- formal languages, Chomsky hiearchy and automata (DFAs, NFAs)
- algorithms & data structures (syntax trees, symbol tables & hashing)
- parsing algorithms
- asymptotic complexity (of automata recognition/acceptance and parsing algorithms)
- software architecture (single pass versus multi-pass, abstractions)
- operations research (graph coloring based register allocation)
- assembler & automatic code generation
- virtual machines & interpreters
It is a field where theory and practice come together beautifully (and works like the Aho et al. ¨Dragon Book¨ or Wirths ¨Compilers¨ are masterpieces that lucidly lay things out so after reading Chapter 2 of the former, or all of the latter short volume (barely 100 pages), a compiler is basically demystified to any undergrad).
Its too focused on the mathematical approach to parsing but almost no mathematical rigour or intuition for the actually interesting parts of compiler IIRC.
These books really only help you for the first five minutes of each part of a compiler e.g. "Here's how to write a register allocator, go find the calling convention yourself and my office hours are never"
- formal languages, Chomsky hiearchy and automata (DFAs, NFAs)
- algorithms & data structures (syntax trees, symbol tables & hashing)
- parsing algorithms
- asymptotic complexity (of automata recognition/acceptance and parsing algorithms)
- software architecture (single pass versus multi-pass, abstractions)
- operations research (graph coloring based register allocation)
- assembler & automatic code generation
- virtual machines & interpreters
It is a field where theory and practice come together beautifully (and works like the Aho et al. ¨Dragon Book¨ or Wirths ¨Compilers¨ are masterpieces that lucidly lay things out so after reading Chapter 2 of the former, or all of the latter short volume (barely 100 pages), a compiler is basically demystified to any undergrad).