David Rees wrote a cut-down version of the Imp language (which was actually at about the same level of complexity as the original [wiki:Self:AtlasAutocode Atlas Autocode]) which was used for compiler teaching for many years. I remember hearing at the time I was in his class that Skimp could be used for bootstrapping full Imp compilers but I thought that was just theoretical. When we were researching old archives for this project, we came across an early PDP-11 compiler from the ERCC (I think perhaps by Stephen Hayes or Keith Yarwood; I'm not sure which) which was clearly a direct port of Skimp. And more recently [wiki:Self:AndysIntelPort Andy Davis bootstrapped Peter Robertson's Imp77 compiler by using Skimp] - I knew that Imp77's pass-1 used a subset of Imp77 but I thought that was so it would go easy on the code generator - I didn't realise until then that pass-1 was written in such simple Imp that it was actually compilable with Skimp! So Skimp was a significant part of Edinburgh compiler culture from the early days right up until the present. We have found the original Skimp sources and have a scan of the manual [http://history.dcs.ed.ac.uk/archive/docs/skimp_ii/skimp.html as bitmaps for web viewing] and [http://www.pufal.net/SKIMP.pdf a pdf for printing], and very recently we have added (see below) a text version which is currently being OCR'd by BrianFoley; we have a port of Skimp to the Interdata series, the PDP-11 and the Motorola 6809; and we have the original interpreter for the Skimp abstract machine which was the original bootstrapping method for Skimp as the interpreter was very simple and could be hand-translated into any convenient language. (Skimp generates HAL which is a Hypothetical Assembly Language as opposed to the coincidentally-named High-Level Assembly Language of Hamish Dewar; Skimp's HAL is easily converted to a target machine code by use of functionally equivalent macros - an early verison of static binary translation...) * Skimp for the m6809 * [http://history.dcs.ed.ac.uk/archive/languages/skimp/m6809/skimpa.imp.html SkimpA] * [http://history.dcs.ed.ac.uk/archive/languages/skimp/m6809/skimpb.imp.html SkimpB] * [http://history.dcs.ed.ac.uk/archive/languages/skimp/m6809/skimpc.imp.html SkimpC] * [http://history.dcs.ed.ac.uk/archive/languages/skimp/m6809/skimpd.imp.html SkimpD] * [http://history.dcs.ed.ac.uk/archive/languages/skimp/m6809/skimpe.imp.html SkimpE] Skimp was either a late 2nd yr, or early 3rd year exercise. Before we were let loose on Skimp we had already had a taste of compiler writing from Peter Schofield. Peter taught us table-driven top-down recursive-descent parsing - ie the same parser technique that was originated in Brooker's Compiler-Compiler (aka [wiki:Self:AtlasAutocode Atlas Autocode]) and was used in most subsequent Edinburgh compilers. We implemented a parser table generator, wrote a grammar for an even simpler version of Imp, wrote a parser and finally wrote a code generator (well, assembly code generator) for the PDP9/15. I recently came across a paper listing of my PDP15 compiler which I have yet to scan. I remember that the space available on the PDP9/15 was so tight that I had to rename most of my variables to single letters, just to squeeze in a few constructs like loops. Writing this compiler gave me a huge amount of respect for Hamish Dewar who had written a [wiki:Self:PDPImp full Imp compiler] which fitted in the same amount of store. Skimp has also been used as a basis for other projects which require some sort of language as input, such as Arthur and Sim. A spin-off program from Skimp is a stand-alone version of its parser generator, ''[http://history.dcs.ed.ac.uk/archive/os/emas/users/ecslib/emas-2900/pdp16pd_reduces.txt Reduce]''.