A compiler is software that translates or converts a program written in a high-level language (Source Language) into a low-level language (Machine Language or Assembly Language). Compiler design is the process of developing a compiler.
- The Key objectives of compiler design are to automate the translation process, check the correctness of input code, and reporting errors in source code.
- It acts as the "translator" of the programming world, bridging the gap between human-readable code and machine-understandable instructions.
- It involves many stages, like lexical analysis, syntax analysis (parsing), semantic analysis, code generation, code optimisation, etc.
- Most of the early high-level languages, like C and C++ were compiled. However, modern languages like Java and Python use both interpreter and compiler. Please note that the compiler only translates, but interpreter runs as well.
Introduction
Explains how high-level programs are converted into machine code.
- Introduction
- Phases of a Compiler
- Single Pass vs Two Passes
- Compiler construction tools
- Symbol Table in Compiler
- Error Handling in Compiler Design
- Generations of Programming Languages
Lexical Analysis
First compiler phase that converts source code into tokens.
Syntax Analysis
Verifies the grammatical structure of a program.
- Introduction to Syntax Analysis
- FIRST and FOLLOW
- Classification of Context Free Grammars(CFG)
- Ambiguous Grammar
- Introduction to Parsers
- Classification of top down parsers
- Bottom Up Parser
- Shift Reduce Parser in Compiler
- SLR, CLR and LALR Parsers
- Operator grammar and precedence parser
Syntax Directed Translation
Uses grammar-based semantic rules to guide program translation.
Code Generation and Optimization
Transform intermediate code into efficient target code.
- Code Optimization
- Intermediate Code Generation
- Issues in the design of a code generator
- Three address code in Compiler
- Detection of a Loop in Three Address Code
- Introduction of Object Code
- Data flow analysis in Compiler
Runtime Environments
Deal with how programs are executed and managed at runtime.
- Static and Dynamic Scoping
- Runtime Environments
- Linker
- Loader in C/C++
- Developing a Linux based shell
- Storage Allocation Strategies