This is a basic course in compiler construction. You will learn how to write a compiler with a special emphasis on code optimizations.

Course Topics:

Compilation of imperative programming languages :
Language constructs and their compilation
The architecture of the P machine
Assignments and expressions
Space requirments
Identifying equal sub-trees (linear complexity)
Conditional and iterative statements, sequences of statements
Memory allocation for variables of simple type
Memory allocation for static arrays
Memory allocation for dynamic arrays
Memory allocation for records
Pointers and dynamic memory allocation
Nesting levels
Passing parameters by-var / by-value
Variable of type function
Formats of machine description
List scheduling

Intermediate optimizations using data flow analysis :
Algebraic simplifications
Constant propagation
Copy propagation
Dead-code elimination
Strength reduction
Invariant code motion of Loop
. Common subexpression elimination
. Inserting assignment in IF-THEN-ELSE statements
. Load-store elimination
. Efficient array references in loops
. Loop unrolling
. Minimizing number of allocated registers
. Using parallel instructions

Machine-dependent code optimizations :
Abstract and real machines
Classification of architectures (VLIW)
Ways of representing architectures
Instruction scheduling/List scheduling

Parsing and lexical analysis :
Becoming familiar with software tools like Flex and Bison

Most of the topics will be covered but not all of them.

Text Books:

by Alfred V. Aho (Author), Monica S. Lam (Author), Ravi Sethi (Author), Jeffrey D. Ullman (Author)
"Compilers: Principles, Techniques and Tools (2nd Edition)" , Addison Wesley; 2 edition (August 31, 2006)

R. Wilhelm and D. Maurer - "Compiler Design", Addison-Wesley, 1995 (We will mainly study chap. 2,12)