This is an implementation of the programming language PL-{GOTO}. It is a compiler, written in Haskell that generates MSIL. It is distributed in the PL-{GOTO}.NET distribution and it is in the Public Domain.
PL-{GOTO}.NET is a compiler for the language PL-{GOTO}
from Brainerd and Landweber's Theory of Computation
PL-{GOTO} can express exactly the
primitive recursive functions, and thus PL-{GOTO} programs
always terminate. PL-{GOTO}.NET generates MSIL code which
can then (using ilasm) be turned into a .NET
executable. It can also execute PL-{GOTO} programs
directly.
Dependencies
To run this implementation, you need:
-
to build it first, for which you will need:
- an implementation of Parsec
- an implementation of Haskell (we suggest ghc)
Commentary
I've been idly fascinated by the primitive recursive example programming language
PL-{GOTO} from Brainerd and Landweber's Theory of Computation for some time.
And for some reason I will never be able to explain, I had the craving to implement a compiler
which could produce .NET executables by generating MSIL assembly language. And putting
those two together — well, that struck me as a respectably absurd match, so that's what I did.
The compiler is written in Haskell and uses Parsec for parsing PL-{GOTO} programs; I tried
to keep the grammar true to what is presented in the book, not refactoring it to be LL(1), and
keeping the ← symbol for assignment.