This course is intended to give the student a deep understanding of techniques and algorithms used in different phases of the compilation process. At the end of the course, the student is expected to have gained good know how with basics algorithms used during the compilation process, thus enabling him/her to easily implement a compiler by the means of either a high level programming language(C++, Java) or a compiler generator (Lex and Yacc).
It is a one-semester course, which deals with compiler design, construction and implementation. The course is divided into two main parts. The first part is about the analysis stage of compilation, and after an introduction to compilation process, we study language definition, lexical analysis, top-down parsing, bottom–up parsing and semantic analysis. The second part of the course, on the synthesis stage of compilation consists on storage allocation and code generation.
The course also has a practical aspect in which students undergo mini-projects such as the implementation of a lexical analyzer, a non-recursive predictive parser, and a shift-reduce parser. During the course students undertake practical examples and case studies using LEX and YACC.