: The ProgramCritic is a system designed to analyze and critique students' computer programs. After analyzing a program, the ProgramCritic provides the student with a list of English-language comments detailing the strengths and weaknesses of the student's program. The foundation of the ProgramCritic's analytic abilities is a set of "knowledge bases" which describe a range of programming problems and the ways in which parts of the problem can be solved. Several other systems have been built by other researchers with a functionality similar to the ProgramCritic's; notable among them is PROUST [Johnson 1986]. Differences between the ProgramCritic and PROUST are described through a detailed explanation of how one might build a compiler for PROUST's knowledge base language. Shortcomings with PROUST's knowledge base language are pointed out one-by-one and for each shortcoming a fix is proposed. Integrating the proposed fixes together serves to explain...