This document discusses compilers and programming languages. It covers the structure of compilers, how programming languages are evaluated, and the science of building compilers. Specific topics covered include the basic components of compilers like lexical analysis and input buffering, how tokens are specified and recognized, lexical analyzer generators, and finite automata.