CSI4104 Compiler Design, Fall 2016


A compiler is a computer program that translates text written in a given language (called the source language) into another language (the target language). With most compilers the source language is a high-level programming language (e.g., C, C++, Java), and the target language is a lower-level representation such as assembly language or bytecode. In this course we will focus on compiler techniques needed to implement programming languages on a virtual machine. Students will implement a compiler that translates a subset of C into Java bytecode. This bytecode can then be executed on the Java virtual machine (JVM).


This course will cover both practical and theoretical aspects of a compiler. Our main emphasis will be on the compiler frontend (i.e., scanning, parsing, semantic analysis) and on code-generation for the JVM. Compilers are carefully crafted, complex pieces of software. We will apply software-engineering principles such as component-based design, Object-oriented design-patterns and error-handling using exceptions with our compiler.


See schedule on YSCEC.


Assignment Title Material
1 Scanning YSCEC
2 Parsing YSCEC
3 AST Generation link
4 Semantic Analysis link
5 Code Generation link