A famous tutorial on bootstrapping a new language compiler.

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