|
| Imp77 |
UserPreferences |
| Edinburgh Computer History | FrontPage | RecentChanges | TitleIndex | WordIndex | SiteNavigation | HelpContents | moin.sf.net |
Imp77 is the brainchild of Peter Salkeld Robertson - or "PSR" for short - who developed this variant of Imp primarily for his
PhD thesis (also
original scan). Imp77 is a three-pass compiler (the first to use that style at Edinburgh) which uses an intermediate code called
I-Code. I-Code was later developed commercially by Peter's company, 3L (aka Lattice Logic Limited) in order to add multiple language support - a design which presages the recent Microsoft ".net" compiler design.
See also:
We have located sources of a few of Peter's compilers:
Pass 1 includes a grammar which is pre-built from an
input file using a
parser generator. As Peter explains elsewhere, this is a severely hacked (to the point of being unrecognisable) version of Hamish Dewar's parser.
Here is the Imp11 for the PDP11 manual and sources. This was Peter's second version for the PDP-11. The earlier version was one of his first Imp compilers.
I-Code, much like Java bytecode, contains enough information to do a fair job at reconstituting the source from an I-Code file. However as we have absolutely no I-Code files preserved, writing such a decoder would be a pointless exercise. However I have made an effort at writing an I-Code to C translator as a substitute for an Imp77-to-C translator. Peter Stephens has also written an Imp80 to C translator which has proven very useful to this project, and a third attempt at a full Imp77 (and other dialects) to C is currently underway.
I-Code was improved several times over its lifetime in order to accomodate the addition of new languages as Peter's compiler business expanded
It was designed to support Imp and Simula; I know that it supported Algol 60 and Fortran 77, with later front ends for C and Pascal written commercially by Lattice Logic/3L. It's interesting to look at Micro$oft's ".net" compiler system and see how similar it is, 20 years later, to Peter's final I-Code design.
I-code was to some extent an attempt at an UNCOL, but I think with hindsight it has turned out that the low-level language "C" has turned into what UNCOL was meant to be, because almost every language has a converter to C nowadays.