Compiler Design
Spring 2025 @ NYCU with Prof. Yi-Ping You
Assignment 5 is now released!
Welcome to the final assignment of the Compiler Design Adventure! The submission deadline is June 16th, 2025, at 23:59 (Mon.). No late submissions will be accepted for this assignment.
For this assignment, you will connect the final pieces of the puzzle by generating RISC-V assembly code that can be executed on a RISC-V simulator. It will be a fun and rewarding experience to see your compiler in action!
If you encounter any challenges during the setup process, don’t hesitate to reach out to the TAs.
Final exam announcement
- Date: June 5, 2025 (Thursday)
- Time: 10:00 AM - 12:00 PM
- Location: EC016 (Seat assignments will be provided at the venue)
- Exam scope: The exam will cover material from Chapters 5 to 7, Sections 8.1 to 8.5, Section 8.8, Sections 9.2 to 9.3, and Section 9.6. Basically, sections that were not discussed in class are excluded.
Make sure to review the relevant sections thoroughly. Best of luck with your preparations!
Assignment 4 is now released!
Dear folks, the fourth assignment is now released. The due date is May 26, at 23:59 (Mon.).
As with the previous assignment, this one requires a significant amount of effort. We strongly recommend starting early to effectively navigate through the challenges. While the road ahead may have its obstacles, we promise that by tackling this assignment, you’ll not only gain insights into how compilers utilize the symbol table for type checking but also learn invaluable lessons in implementing interactions between objects.
If you encounter any difficulties, don’t hesitate to reach out for assistance. Whether through the forum or email, we’re here to support you every step of the way.
Overview
This course is intended to explore the principal ideas and techniques of compiler construction. Topics include lexical analysis, syntax analysis including LL and LR parsers, type checking, run-time environments, symbol tables, code generation, and compiler-construction tools.
This course aims to give you a solid foundation in the theory of compiler construction as well as the experience of building a compiler. Much of what you have learned about algorithms and data structures will come to bear as you study and implement the various components of a compiler. In a sense, compiler construction is a showcase for many other disciplines of computer science.
Goals
- To learn structure of compilers.
- To learn basic techniques used in compiler construction such as lexical analysis, top-down and bottom-up parsing, context-sensitive analysis, and intermediate code generation.
- To learn basic data structures used in compiler construction such as abstract syntax trees, symbol tables, three-address code, and stack machines.
- To learn software tools used in compiler construction such as lexical analyzer generators (Lex), and parser generators (Yacc).
- To construct a compiler for a small language using the above techniques and tools.