A famous tutorial on bootstrapping a new language compiler.

Chris Pressey 96ff46dbb3 Added tag rel_1_2_2014_0422 for changeset 92e1d8c0fd4b 8 years ago
bin 64d22d574c Add doc explaining latest work. Bump version number to 1.2. 8 years ago
doc 64d22d574c Add doc explaining latest work. Bump version number to 1.2. 8 years ago
eg 41d53e2c93 Input source is now terminated with vertical tab instead of NUL. 8 years ago
lib e5c4e2b0fb Rectify file permissions. 9 years ago
src 64d22d574c Add doc explaining latest work. Bump version number to 1.2. 8 years ago
.hgignore 41d53e2c93 Input source is now terminated with vertical tab instead of NUL. 8 years ago
.hgtags 96ff46dbb3 Added tag rel_1_2_2014_0422 for changeset 92e1d8c0fd4b 8 years ago
Makefile e56a7e0eb3 Prefer yasm to nasm, but you can make YASM=nasm if you like. 8 years ago
README.md 64d22d574c Add doc explaining latest work. Bump version number to 1.2. 8 years ago

README.md

Shelta

Shelta is a minimal Forth-like language. It has barely any semantics of its own; it relies on inline machine code to write anything resembling an actual program in it.

In the spirit of compilers for languages such as FALSE and brainfuck, a Shelta-to-8086 compiler was implemented (with some help from Ben Olmstead) as an MS-DOS .COM executable containing less than 512 bytes of 80286 machine code.

What's more, it has also been bootstrapped — that is to say, a Shelta compiler was written in Shelta, which was compiled with the original compiler, and then compiled again with the resulting compiler, producing a wholly self-hosted executable.

For more information, see the files in the doc directory of this distribution.