Teaching

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

Back to Homepage



Principles of Compiler Design (2024, 2025 Spring)

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.

Interpreters and Virtual Machines (2025 Spring)

This course delves into the fascinating world of how programs are executed in another way, focusing on interpreted execution rather than compiled execution. An interpreter or VM creates a simulated environment in which programs can run, providing benefits like platform independence and enhanced security. This course includes popular architectures like the tree-walk interpreter and Java Virtual Machine (JVM). By the end of the course, students will not only have a deep understanding of how interpreters and VMs function, but also will have their own controllable programming language, MiniJava.

Data Structure and Algorithms (2025 Fall)

This course provides the essential foundation for organizing, storing, and processing data in ways that optimize performance and resource usage. It explores core data structures, including arrays, linked lists, stacks, and queues, before progressing to more advanced topics like trees, graphs, and hash tables. Alongside these structures, students learn key algorithms for searching, sorting, recursion, dynamic programming, and graph traversal. Mastery of data structures and related algorithms is crucial for software development, competitive programming, and technical interviews, making this course indispensable for aspiring programmers and computer scientists.