Skip to the content.

Course Description

Programming languages are notations for describing computations to people and to machines. The world as we know it depends on programming languages, because all the software running on all the computers was written in some programming language. But, before a program can be run, it first must be translated into a form in which it can be executed by a computer.

The software systems that do this translation are called compilers.

This course is about how to design and implement compilers. We shall discover that a few basic ideas can be used to construct translators for a wide variety of languages and machines. Besides compilers, the principles and techniques for compiler design are applicable to so many other domains that they are likely to be reused many times in the career of a computer scientist. The study of compiler writing touches upon programming languages, machine architecture, language theory, algorithms, and software engineering.

Teaching Staff

Instructor

Prof. Zhongxing Yu(余仲星)

Teaching Assistants

TA Responsibility
Yejian Liang(梁叶剑) 129(131)
Lantian Li(李蓝天) 137(139)
Yali Du(杜雅莉) 133(135)

Textbook and Resources

Assignments and Lab

:warning: WARNING: Plagiarism is definitely unacceptable in this course! All codes submitted will be examined through Stanford MOSS system. There will be severe consequences for those who have plagiarism detected!
:memo: ATTENTION: Do make sure to read the lab requirements before programming since your code will be judged by an Auto-Grading System. Detailed information will be announced soon.

Labs

Lab Content Suggested Time Requirements Percentage
Lab 1 Lexical Analyzer 2 hours [PDF] 40%
Lab 2 Syntactic Parser 4 hours [PDF] 40%
Lab 3 PL0 Compiler 6 hours [PDF] 20%

Note-sharing Project

项目介绍:往届同学在学习过程中整理的笔记,供学弟学妹参考,欢迎补充和指正!

🎉🎉第一版笔记(初稿)下载 [PDF]