The compiler knows a lot about your programs. That knowledge can let you build sophisticated tools for analysing and mutating code.
I'll give a basic overview of the architecture of the compiler and the phases of compilation. I'll cover some of the APIs you can use to get at the results of program analysis. I'll show how tools for cross-referencing, refactoring, and reformatting work with the compiler, and I'll work through a simple tool in detail. By the end of the talk, you should know what the compuler does and be able to start writing your own tools based on the compiler's analyses.