This document provides the specification for the Decaf programming language that will be used in a compiler course project. Decaf is an object-oriented language similar to C++ and Java, but with a simplified feature set to make the compiler projects manageable. The specification defines Decaf's lexical elements, keywords, types, variables, arrays, scoping rules, and grammar. Key points are that Decaf supports classes, interfaces, inheritance, and dynamic memory allocation using NewArray.