This course uses compilers as examples to expose students to modern software development techniques. Tentative topics include: compiler organization; lexical analysis; top-down and bottom-up parsing; symbol tables; semantic analysis; code generation; local and global optimization; register allocation; automatic memory management.
Objective
Learn principles of compiler design; gain practical experience designing and implementing a medium-scale software system.
Content
This course uses compilers as example to expose modern software development techniques. The course introduces the students to the fundamentals of compiler construction. Students will implement a simple yet complete compiler for an object-oriented programming language for a realistic target machine. Students will learn the use of appropriate tools. Throughout the course, students learn to apply their knowledge of theory (automata, grammars, stack machines, program transformation) and well-known programming techniques (module definitions, design patterns, frameworks, software reuse) in a software project.
A tentative list of topics: compiler organization; lexical analysis; top-down and bottom-up parsing; symbol tables; semantic analysis; code generation; local and global optimization; register allocation; automatic memory management; optional advanced topics if/when time permits.
Literature
Aho/Lam/Sethi/Ullmann, Compilers - Principles, Techniques, and Tools (2nd Edition)
Muchnick, Advanced Compiler Design and Implementation, Morgan Kaufmann Publishers, 1997
Prerequisites / Notice
Prerequisites: Prior exposure to modern techniques for program construction, knowledge of at least one processor architecture at the assembly language level.
Performance assessment
Performance assessment information (valid until the course unit is held again)