In this paper we present the design and implementation of a fully automated technique for reverse engineering or recovering a grammar from existing language artifacts. The technique that we describe uses only test cases and a parse tree, and we apply the technique to a dialect of the C++ language. However, given test cases and a parse tree for a language or a dialect of a language, our technique can be used to recover a grammar for the language, including languages such as Java, C, Python or Ruby.