I'd tried to implement Christopher J. Strachey's GPM in C, from scratch, a couple of months ago. While I had something that worked well enough for my needs, it wasn't quite GPM and did not work for many of the GPM examples listed in Strachey's paper.
Even at the time that I worked on my implementation, I was aware of Patty S. Loughney's implementation in Rust and Martin Richards implementation in BCPL.
While browsing through the Rust implementation, (about a month or so after my original implementation), I felt that it might be possible to just make some fairly straight forward transformations to the Rust code to "generate" a C version. So I then decided that rather than continue my haphazard attempts on my C implementation, I would try my hand at porting Loughney's code from Rust to C - RIIC, instead of RIIR, if you will.
To start off, I threw together a simple Perl script that handled most of the code generation (my guesstimate is ~80%) and after a couple more hours of handling the gnarlier parts of the port, I had a working GPM implementation ported from Rust to C.
As a bonus, I was able to fix one of the bugs that was mentioned in their README since I was aware of the fact that Martin Richards had fixed that bug, which was a coding issue in Strachey's macros rather than an actual bug in the Rust implementation.
With a working GPM implementation, I then went ahead with the additional syntax sugar changes to the GPM syntax that I'd prototyped in my initial implementation and made those changes in the new port as well.
In case anyone has a hankering for my variant of GPM, which actually passes all of the test code from Strachey's paper, the code is up on Github at: https://github.com/romforth/gpm.psl
To clone and build (and test), you only need a regular old C compiler (and git, of course):
git clone https://github.com/romforth/gpm.psl
cd gpm.psl && make