Compiler is a program translating programs written in a high-level language into semantically equivalent programs in another language, typically machine code. The compiler enables us to program in highlevel languages, and it gives a layer of abstraction so that we do not have to worry when programming about the complex details of the underlying hardware. The designer of any compiler obviously needs to know the details of both the source language being translated and the language being generated, usually some form of machine code for the target machine. The design of compilers is influenced by the characteristics of formal language specifications, by automata theory, by parsing algorithms, by processor design, by data structure and algorithm design, by operating system services, by the target machine instruction set and other hardware features, by implementation language characteristics and so on, as well as by the needs of the compilers’ users. Writing a simple compiler is an excellent educational project and enhances skills in programming language understandingand design, data structure and algorithm design and a wide range of programming techniques. Studying compiler design makes you a better programmer.