Designing Compilers Principles and Techniques

In this course we learn how to design and implement a compiler. Main topics are as follows:

-Weeks #1 and #2: Basics, Compiler Structure, Compiled vs. Interpreted Programming Languages, One-pass vs. Multi-pass Compilers.

-Weeks #3 and #4: Lexical Analysis: Regular Languages, DFAs and NFAs, Tokenization, Buffering, Error handling techniques, Implementing a lexical analyzer using Flex.

-Weeks #5 and #6: Syntax Analysis: CFG vs. Regular Grammar, Predictive Parsers, Top-down Parsers, Recursive Descent and LL(k) Parsers, Error Handling in LL(k) parsers.

-Weeks #7 and #8 and #9: Syntax Analysis: Bottom-up Parsers, LR(k) Parsers, LR(0), SLR(1), CLR(1), LALR(1), Error Handling, Implementing a syntax analyzer using YACC.

-#Weeks #10 and #11: Semantic Analysis: CSG vs. CFG, Attribute Grammar, Syntax-Directed Translation, Synthesized and Inherited Attributes, Semantic Analysis and Top-down Parsing.

-Weeks #12 and #13: Code Generation, 3-argument Intermediate Code, Semantic Stack, Backpacking technique, Code generation and Bottom-up parsing, Code generation using YACC.

-#Weeks #14 and #15: Optimization. Control Flow and Data Flow, Intermediate Code Optimization, Machine Code Optimization.

#Week #16. Misc. Topics: Garbage Collection, Security, etc.