Covers the underlying techniques of Compiler Construction. The course will introduce the theory and tools that can be employed in order to perform syntax-directed translation of a high-level programming language into an executable code. Topics covered include: lexical analysis; parsing theory; symbol tables; semantic analysis; intermediate representations; runtime environments; code generation; and basic program analysis and optimization. In the optional final project, Students will construct a compiler function for a simple object-oriented language by using LLVM which is a compiler infrastructure, written in C++, and now maintained by Apple Incorporated.