We have developed a complete formal specification of the translation semantics of the Pascal P-compiler. The specification is written as a semantic grammar (a variant of extended attribute grammars), and has been extensively tested and debugged with the aid of Lawrence Paulson's experimental semantics processor. The translation semantics models the operational aspects of compilation in detail. It is one-pass, embodying static semantic checking, address assignment, code generation, and a certain amount of code improvement. Our paper describes the development history of the project, compares the new compiler with the existing P-compiler, and discusses our positive experience with semantic grammars and Paulson's system.