- Course number and name
CSC416 – Design and Construction of Compilers
- Credits and contact hours
3 Credit Hours
- Instructor’s or course coordinator’s name
Instructor: Dr. Richard Burns, Assistant Professor of Computer Science
Text book, title, author, and year
Modern Compiler Implementation in Java, 2nd edition, Appel, Cambridge University Press, 2002.
Other Supplemental Materials
“Assemblers, Linkers, and the SPIM Simulator”, in Computer Organization and Design (Appendix A), Hennessy and Patterson, Morgan Kaufmann, 2013.
Specific course information
brief description of the content of the course (catalog description)
Design and construction of compilers including lexical analysis, parsing techniques such as LL(1), LR and LALR(1), code generation techniques. Error analysis and simple code optimizations will be introduced. Students will implement a large scale project consisting of developing a lexical analyzer, parser, abstract syntax tree, symbol table, intermediate and assembly code.
prerequisites or co-requisites
Prerequisite: CSC220 Foundations of Computer Science, CSC241 Data Structures and Algorithms, CSC242 Computer Organization.
indicate whether a required, elective, or selected elective course in the program
Selected elective (student must take one of: CSC417, CSC416, CSC496).
specific outcomes of instruction
- Students will be able to understand the phases of a compiler
- Students will be able to utilize modern tools to perform the lexing and parsing phases of a compiler’s front-end
- Students will be able to understand the theoretical concepts of LL(1) and LR(1) parsing
- Students will be able to understand the back-end phases of a compiler, including: intermediate representations, runtime organization, optimization, and code generation
- Students will be able to implement a compiler that spans from the lexical front-end to code generation in the back end
explicitly indicate which of the student outcomes listed in Criterion 3 or any other outcomes are addressed by the course.
Course addresses Student Outcomes (a), (i), (j), and (k).
- Brief list of topics to be covered
- Structure of a Compiler
- Lexical Analysis
- Regular Languages Review
- Finite Automata Review
- Regular Expressions
- Context Free Grammars Review
- LL(1) and LR(1) Parsing
- Abstract Syntax Trees
- Visitor Design
- Semantic Analysis
- Symbol Tables
- Type Checking
- Runtime Organization
- Code Generation
- Local Optimization
- Global Optimization
- Register Allocation