This document provides an overview of compiler design. It describes the different phases of a compiler including lexical analysis, syntax analysis, and code generation. It also discusses compiler architecture and the various components involved in translating a high-level language to machine-executable code like the preprocessor, parser, code generator and linker. The intended audience are students interested in learning the basic principles of compilers.