Compilers

The course designers and instructors deeply appreciate researchers in the community for their inspiring works, which provide rich materials for developing the course and advancing the research in this direction.

Back to Homepage · Previous Page




Fig 1. The textbook.

Welcome to our comprehensive course on compilers! This course will delve into the intricate world of programming language translation and execution. Compilers are the backbone of modern software development, translating human-readable code into machine-executable instructions. Whether you're a beginner or an experienced developer looking to deepen your understanding, this course will equip you with the knowledge and skills of designing, implementing, and optimizing compilers.

Throughout this journey, we'll cover various topics, including lexical analysis, syntax parsing, semantic analysis, code generation, and optimization techniques. You'll learn about compiler architectures, compiler construction tools, and practical strategies for building efficient compilers for various programming languages.

By the end of this course, you'll have a solid grasp of how compilers work under the hood and gain practical experience through hands-on projects and assignments. So, let's embark on this exciting exploration of compilers together!

Prerequisites: Before registering for this course, a student must check if he has basic knowledge of data structures, algorithms, and fundamental programming languages such as C/C++ and Java.

Lectures

The course slides are listed below. They cover most but selective parts of the Dragon Book, with Chapter 11 intentionally excluded and much more not covered in the textbook. Contact the instructor if you have any questions or suggestions.

The course designers deeply appreciate instructors and researchers in the community for their inspiring works, which provide rich materials for developing the course slides.

Lectures Materials
Ch1/Ch2 Introduction to Compilers
   - Basic Concepts of Programming Languages and Compilers

Slides-1
Front End
Ch3 Lexical Analysis
   - DFA / DFA Minimization and Bisimulation / NFA / NFA → DFA
   - Regular Language and Expression / Pumping Lemma / Lexical Analysis

Slides-1
Slides-2
Ch4 Syntax Analysis
   - Context-Free Language / Push-Down Automata / Pumping Lemma for CFL
   - Top-Down and LL Parsing / Precedence Climbing Parser

Slides-1
Slides-2
Ch5/Ch6 Intermediate Representation
   - Three Address Code / Syntax-Directed Definition / IR Generation
   - Translation into SSA / LLVM IR

Slides-1
Slides-2
Back End
Ch7/Ch8 Target Code Generation
   - Memory Model / Instruction Selection / Peephole Optimization
   - Translation out of SSA
   - Local Register Allocation / Global Register Allocation

Slides-1
Slides-2
Slides-3
Ch10 Instruction Scheduling
   - Scheduling Constraints / Local Scheduling / Global Scheduling

Slides-1
Middle End
Ch9 Dataflow Analysis
   - Dataflow Analysis / Sparse Dataflow Analysis
   - Symbolic Execution / Satisfiability

Slides-1
Slides-2
Ch12 Interprocedural Analysis
   - Context Sensitivity / IFDS / CFL-Reachability
   - Pointer Analysis / Datalog-Based Analysis

Slides-1
Slides-2

Labs

(TBA)

Grading Scheme

(TBA)

Teaching Assistants

(TBA)

Online Discussion

(TBA)

Office Hours

By appointment. Feel free to email TAs or the instructors to claim a time slot.