The document discusses various concepts related to compiler design including:
1. A compiler translates a source program into an equivalent target program and detects errors. It performs analysis and synthesis.
2. The analysis phase breaks down the source code into pieces and determines syntax and meaning. Synthesis converts the intermediate code into a target program.
3. A symbol table stores identifiers, their attributes like type, scope, and storage allocation. It also stores information about subroutines.
4. Preprocessors allow macros, include files, and perform preliminary functions before compilation.
5. Context free grammars are used to specify language syntax using terminals, non-terminals, start symbols, and productions.