Language Implementations

Language Implementations

This is a list of languages that Cat's Eye Technologies has built an implementation for (or simply maintains a fork of), but which were not designed by Cat's Eye Technologies.

PL-{GOTO}.NET

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.

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.

aubergine.hs

I implemented Aubergine because the reference interpreter is buggy and I wanted a version that actually implemented the unbounded integers that the language description suggests. After implementing it, I was familiar enough with it to write a sketch of a proof of its Turing-completeness.

Here it is: Aubergine/aubergine.hs.

muriel.pl

This is an interpeter, written in Perl, for Matthew Westcott's quine-based language Muriel. It was probably the first full implementation of that language.

pibfi

In contrast to all the ultra-minimal Brainfuck interpreters and compilers out there, I figured I should write a monster: the Platonic Ideal BrainFuck Interpreter. Written in Erlang, it contains just about every feature under the sun, including the kitchen sink. I sort of lost interest when I was adding profiling and discovered there were several different extant reckonings of a "number of instructions executed" metric for Brainfuck. I guess it was that point that made me recognize just how silly this project was...

sf2tab

Based on the observation that Smallfuck, lacking the (assumed-)infinite tape of Brainfuck, can only express finite-state automata, I wrote a little program in C to compile Smallfuck programs to (generally gigantic) lookup-tables.

There is also an old sf2tab distribution.

stringie

Seeing that there was no non-pathological implementation of Alex Smith's beautiful Underload language in C, I undertook that project one evening. (In the company of a bottle of really fine wine. Why, it cost almost twelve dollars.) The result is one of the most pedantic and boring Underload interpreters known to man. Perhaps the most interesting property of it is its name, stringie, which was an accident.

tc.catseye.yoob.ale

Implemented as part of yoob.

tc.catseye.yoob.backflip

Implemented as part of yoob.

tc.catseye.yoob.black

Implemented as part of yoob.

tc.catseye.yoob.brainfuck

Implemented as part of yoob.

tc.catseye.yoob.lnusp

Implemented as part of yoob.

tc.catseye.yoob.onela

Implemented as part of yoob.

tc.catseye.yoob.onelaoi

Implemented as part of yoob.

tc.catseye.yoob.path

Implemented as part of yoob.

tc.catseye.yoob.qdeql

Implemented as part of yoob.

tc.catseye.yoob.sceql

Implemented as part of yoob.

tc.catseye.yoob.snusp

Implemented as part of yoob.

tc.catseye.yoob.twoill

Implemented as part of yoob.

tc.catseye.yoob.twol

Implemented as part of yoob.

thue.rb

Since I've been maintaining a distribution of this language for a while, and not otherwise involved with it, I decided I should finally implement it. After knocking my head against the spec and reference implementation for a few hours (over the course of months, or has it been years?), I finally did implement it.

valgol.erl

A parser, in Erlang, for the Lesser-Known Language VALGOL. It, like, totally demonstrates how a parser can be written so that a separate scanner is totally not needed. Bitchen!

Implemented Automata

We don't have a dedicated page for implemented automata yet, so they are here.

life.alp

Conway's Game of Life, in ALPACA.

wireworld.alp

Wireworld, in ALPACA.

Forked Language Projects

miniscm

Forked in order to make it build on AmigaDOS 1.3.

Fork began Dec 13, 2011.

OpenZz

Forked because Zzrk depends on it, and I want to maintain that.

Note that while most of the code is LGPL, the REPL is GPL.

Fork began Feb 1, 2012.