A language description, such as a grammar specification, is required to construct a tool that performs analysis, comprehension, maintenance, or visualization tasks for programs written in the language. However, a language dialect, which is a variation and/or extension of a language, is typically not accompanied by a grammar specification and is sometimes not accompanied by either a language manual or an ad hoc specification. Therefore, the only representation of the grammar for the language dialect frequently is the programmatic representation of the grammar found in the source code of a compiler for the language. This is problematic because parser generation algorithms place restrictions on the form of a compiler grammar, thereby making it difficult to comprehend. Nevertheless, there has been little work on recovering a grammar specification for a language or a language dialect from existing language artifacts. Furthermore, there exists no methodology that enables a language engineer to automatically recover a grammar specification for a language. In this paper we present a methodology for automated grammar recovery from existing language artifacts; in particular, the methodology takes as input a set of parse tree instances. We then describe a system that implements the methodology and present empirical studies that we performed using the system. Our studies encompass the extraction, measurement, assessment, refactoring, and exchange of a grammar for a language dialect. We focus on the GNU dialect of C++ in our studies, but our methodology is applicable to other well-known language dialects, including Eclipse C/C++ and Jikes Java.