COURSE OBJECTIVES

Differentiate between different levels of programming languages. Understand the role of front-end and back-end of a compiler. Recognize different types of grammars. Understand and define grammars in BNF, syntax diagrams, regular expressions. Define tokens using the notation of regular expressions. Convert regular expressions into finite automata. Implement a lexical analyser. Define a programming language syntax using a CFG. Construct a parse tree for a given program. Differentiate between top-down and bottom-up parsing strategies. Understand LL (k) and LR (k) grammars. Write a top-down parser using recursive-descent and LL (1) parsing methods. Understand simple-precedence, operator precedence and SLR parsing methods. Understand semantic analysis (type checking, scope checking etc.) Understand various types of runtime environments. Understand code generation techniques. Understand code optimization techniques.

COURSE LEARNING OUTCOMES (CLO)

CLO: 1. Describe the architecture of a compiler, and function of its components. (C1-Knowledge)
CLO: 2. Choose and apply appropriate formal notations to define a programming language. (C3-Application)
CLO: 3. Design and implement lexical and syntax analyzers by using various algorithms. (C3-Application)
CLO: 4. Select and use appropriate code generation and optimization techniques. (C4-Analysis)

COURSE CONTENTS

  1. High level languages and translators
  2. Phases of the compilation process
  3. Syntax and semantic specification of a language
  4. Chomsky’s hierarchy of grammars
  5. Design and implementation of a lexical analyzer
  6. Top-down and bottom-up parsing strategies
  7. Ambiguous Grammars
  8. LL(k) and LR(k) grammars
  9. Recursive-descent and LL(1) parsing
  10. Left factoring and left recursion removal
  11. Simple precedence, SLR and LALR parsing
  12. Semantic Analysis, Attributed grammars
  13. Code generation from annotated parse tree
  14. Code optimization