1.1 MODULES AND INTERFACES
The compiler is broked in many pieces that allows for reuse of the components. Phases: lex, parse, parsing actions, semantic analysis, translate, canonicalize, instruction selection, control flow analysis, data flow analysis, register allocation, code emission, assembler and linker.
1.2 TOOLS AND SOFTWARE
Two of the most useful abstractions used in modern compilers are context-free grammars, for parsing, and regular expressions, for lexical analysis.
1.3 DATA STRUCTURES FOR TREE LANGUAJES
Many of the important data structures used in a compiler are intermediate representations of the program being compiled. Often these representations take the form of trees.