|
Questions Schedule |
||||||||||||||||
- DESCRIPTION:
-
This course covers the design and implementation of compiler and runtime systems for high-level languages, and examines the interaction between language design, compiler design, and runtime organization. Topics covered include lexical and syntactic analysis, semantic analysis, type-checking, program analysis, code generation and optimization, memory management, and runtime organization.
Compilers and principles of compiling are one fundamental core aspect of computer science. Compilers and several other parts of compiler technology (especially parsing, transformation, analysis, and optimization) play important roles in many systems built every day. The knowledge gained in this course should be broad enough that if you are confronted with the task of contributing to the implementation of a real compiler in the field or similar technology, you should be able to do so confidently and quickly.
Students who successfully complete this course will:
- Distinguish the main phases of a state-of-the-art compiler
- Understand static and dynamic semantics of an imperative language
- Develop parsers and lexers e.g. with parser generators, combinators
- Perform semantic analysis
- Translate abstract syntax trees to intermediate representations and static single assignment form
- Analyze the dataflow in an imperative language
- Perform standard compiler optimizations
- Generate assembly code
- Allocate registers using a graph-coloring algorithm
- Understand opportunities and limitations of compiler optimizations
- Appreciate design tradeoffs how representation affects optimizations
- Automatically manage memory using garbage collection
- Develop complex software following high-level specifications
- PREREQUISITES:
- Students are expected to have significant experience in a high-level programming language
- TEXT: (optional)
-
Andrew W. Appel.
Modern Compiler Implementation in ML.
Modern Compiler Implementation in Java.
Cambridge University Press, 2004.
ISBN 978-0521607643Reinhard Wilhelm, Helmut Seidl, Sebastian Hack. Compiler Design: Syntactic and Semantic Analysis, Springer 2013.
Helmut Seidl, Reinhard Wilhelm, Sebastian Hack. Compiler Design: Analysis and Transformation, Springer 2012.
Reinhard Wilhelm, Helmut Seidl. Compiler Design: Virtual Machines, Springer 2010.
Reinhard Wilhelm , Dieter Maurer.
Übersetzerbau: Theorie, Konstruktion, Generierung.
Springer 1997. Also see English translation Compiler Design with Addison-Wesley, 1995.Alfred V. Aho , Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman.
Compilers: Principles, Techniques, and Tools.
Addison-Wesley 2006.William M. Waite and Gerhard Goos.
Compiler Construction.
© 1995 Springer.
© 1996 William M. Waite and Gerhard Goos.
The content of Compiler Construction is made available via the Web by permission of the authors as a service to the community and only for educational purposes. - METHOD OF EVALUATION:
- Grading will be based on a final exam with a bonus that can be earned by successfully completing compiler design programming assignments. Final exam: TBA Closed book, one double-sided sheet of hand-written notes permitted. Programming labs can be done individually or in pairs.
- MORE INFORMATION:
- See prior instances in Fall 2012, Fall 2011 and Fall 2010 at Carnegie Mellon University by André Platzer and earlier courses by Frank Pfenning.