Course Info

Course Description

Introduction to compiler organization and implementation, including formal specifications and algorithms for lexical and syntactic analysis, internal representation of the source program, semantic analysis, run-time environment issues and code generation. Students will write a compiler for a reasonably large subset of a contemporary language, targeted to a virtual machine.

Prerequisites: CS310 and CS420 or CS622; or permission of the instructor.

This course meets program outcomes 1a (demonstrate proficiency in problem solving, software design and development, data structures, algorithms, computer organization and computer architecture) and 1b (apply this proficiency to larger mid-sized systems such as compilers). Students who successfully complete this course will be able to: write parsers and produce an abstract syntax tree (AST); analyze and generate code for a programming construct represented by an AST; and allocate physical registers (a limited resource) to a program expressed in terms of virtual registers (an unlimited resource).

Course Staff

Name Role Email Office Hours
Swami Iyer Instructor M-3-201-14 In-person: Tue Thu 9:45 AM - 10:45 AM and 2:45 PM - 3:45 PM
Remote: Wed 10:00 AM - 12:00 PM (Zoom link)
Shreyansh Dhandhukia Teaching Assistant M-3-201-10 Tue Thu 11:30 AM - 12:30 PM


We will have two lectures per week, during which I will present the material from the slides. I strongly recommend skimming through the material before each lecture, and reading it again thoroughly soon after.

Section When Where
1 Tue Thu 4:00 PM - 5:15 PM M-3-0430


Introduction to Compiler Construction in a Java World by Bill Campbell, Swami Iyer, and Bahar Akbal-Delibaş

The text enables a deep understanding of the Java programming language and its implementation. It covers all of the standard compiler topics, including lexical analysis, parsing, abstract syntax trees, semantic analysis, code generation, and register allocation. It also demonstrates how JVM code can be translated to a register machine, specifically the MIPS architecture. In addition, the text covers recent strategies, such as just-in-time compiling and hotspot compiling.



Item % of Final Grade
Projects (1, 2, 3, 5, and best of 4 and 6) 35
Exams (1 and 2) 60
Participation 5


% Score Grade
[93, 100] A
[90, 93) A-
[87, 90) B+
[83, 87) B
[80, 83) B-
[77, 80) C+
[73, 77) C
[70, 73) C-
[67, 70) D+
[63, 67) D
[60, 63) D-
[0, 60) F


To calculate your current course grade, visit the What’s My Grade? website.


We will use Piazza as the online discussion forum for the course. If you have any general questions about the projects, lectures, textbook, or other course material, the most effective way to get them resolved is by posting them on Piazza. You can expect your questions to be answered by the course staff or one of your classmates. Remember that you can post anonymously, but you are anonymous only to your classmates and not to the course staff.


We will use Gradescope to grade your projects and exams.

Programming Environment

To write and execute Java programs in this course, you will need a laptop (Linux, Mac, or Windows) properly configured with the necessary software. Click here for setup instructions.

CS Account

In order to use the computing resources of the department, and in particular, those in the CS Lab (M-3-7-0031), you need to setup a CS account. With your CS account credentials, you can connect to our designated server ( remotely using SSH. With the same credentials, you can also sign into the Linux systems in the CS Lab. In addition, you can sign into the Windows systems in the lab with the same username and an initial password abcd_1234, which you must change the first time you sign in.

Visit CS Labs Portal to register for a portal/CS account and confirm via email. If you already have a CS account, use the same username. The next step is to sign into the portal and select your courses for the term. You will be notified via your UMB email once the course directories and your account are created.





Read the handout cs451_collaboration.pdf.

Academic Honesty

Cheating on the projects or exams constitutes a violation of the academic honesty code, and will be handled according to the procedures delineated in the Student Code of Conduct, Appendix B.

Accommodations for Students with Disabilities

Section 504 of the Americans with Disabilities Act of 1990 offers guidelines for curriculum modifications and adaptations for students with documented disabilities. If applicable, students may obtain adaptation recommendations from the Ross Center for Disability Services. The student must present these recommendations and discuss them with the instructor within a reasonable period, preferably by the end of Add/Drop period.

Qualities for Success

Qualities needed to succeed in this course and as a programmer in general (taken from the article 10 Signs You Will Suck at Programming by Jonathan Bluks): curiosity, resourcefulness, persistence, excitement, patience, concentration, independence, focus, creativity, and meticulousness.