# CS420: Compiler Design

## 课程简介

- 所属大学：KAIST
- 先修要求：数据结构、计算机系统基础、Rust 编程基础
- 编程语言：Rust
- 课程难度：🌟🌟🌟🌟
- 预计学时：80小时

这门课程提供了一个 Rust 语言编写的编译器 KECC(KAIST Educational C Compiler) 框架代码，在此基础上构建编译器的一些核心部分，包括语法树打印、SSA中间代码生成、中间代码优化（包括 CFG 简化，GVN 等）以及目标代码生成。与其他编译器课程相比，本课程主要有以下特点：

- 该课程面向真实的 C 语言而非自定义的玩具语言，并且会使用 C 语言 Fuzzing 工具 (Csmith) 进行测试。
- 该课程注重实用性，对编译器前端理论涉及很少，第一个实验也是直接从抽象语法树的遍历开始，并不要求你手动完成前端。课程重点关注于 IR 的设计、生成和优化，以及 RISC-V 汇编代码生成。本课程对于理解和学习 LLVM 也很有帮助。
- 课程配套视频有详细的代码讲解，对初学者友好。

## 课程资源

- 课程网站：<https://github.com/kaist-cp/cs420>
- 课程视频：<https://www.youtube.com/playlist?list=PL5aMzERQ_OZ8RWqn-XiZLXm1IJuaQbXp0>
- 课程教材：<https://github.com/kaist-cp/cs420?tab=readme-ov-file#textbook>
- 课程作业：<https://github.com/kaist-cp/cs420?tab=readme-ov-file#homework-60>
