Introduction:
The structure of a compiler, the science of building a compiler, programming language basics
Lexical Analysis:
The Role of the Lexical Analyzer, Input Buffering, Recognition of Tokens, The Lexical-Analyzer Generator Lex, Finite Automata, From Regular Expressions to Automata, Design of a Lexical-Analyzer Generator, Optimization of DFA-Based Pattern Matchers.
Syntax Analysis:
Introduction, Context-Free Grammars, Writing a Grammar, Top-Down Parsing, Bottom-Up Parsing, Introduction to LR Parsing: Simple LR, More Powerful LR Parsers, Using Ambiguous Grammars and Parser Generators.
Syntax-Directed Translation:
Syntax-Directed Definitions, Evaluation Orders for SDD's, Applications of Syntax-Directed Translation, Syntax-Directed Translation Schemes, Implementing L-Attributed SDD's.
Intermediate-Code Generation:
Variants of Syntax Trees, Three-Address Code, Types and Declarations, Type Checking, Control Flow, Switch-Statements, Intermediate Code for Procedures.
Run-Time Environments:
Stack Allocation of Space, Access to Nonlocal Data on the Stack, Heap Management, Introduction to Garbage Collection, Introduction to Trace-Based Collection.
Code Generation:
Issues in the Design of a Code Generator, The Target Language, Addresses in the Target Code, Basic Blocks and Flow Graphs, Optimization of Basic Blocks, A Simple Code Generator, Peephole Optimization, Register Allocation and Assignment, Dynamic Programming Code-Generation.
Machine-Independent Optimization:
The Principal Sources of Optimization, Introduction to Data-Flow Analysis, Foundations of Data-Flow Analysis, Constant Propagation, Partial-Redundancy Elimination, Loops in Flow Graphs.
TEXT BOOK:
1. Compilers: Principles, Techniques and Tools, Second Edition, Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffry D. Ullman.
REFERENCES:
1. Lex & Yacc – John R. Levine, Tony Mason, Doug Brown, O’reilly
2. Compiler Construction, Louden, Thomson.
Course Outcomes:
1. Demonstrate the ability to design a compiler given a set of language features.
2. Demonstrate the the knowledge of patterns, tokens & regular expressions for lexical analysis.
3. Acquire skills in using lex tool & yacc tool for devleoping a scanner and parser.
4. Design and implement LL and LR parsers
5. Design algorithms to do code optimization in order to improve the performance of a program in terms of space and time complexity.
6. Design algorithms to generate machine code.