Skip to content
bangyenPublic

About

Interpreters and Boolean program generators for 81 esoteric languages.

Topics

Resources

Contributing

Security policy

Stars

12 stars

Watchers

1 watching

Forks

Repository files navigation

Esolang Interpreters

Python CI PyPI License: GPL v3

Interpreters and Boolean generators for 83 esoteric languages: 80 text and 3 raster.

generate builds a truth-table program; run executes it on one input row.

Concepts

The task is uniform across languages: compute a Boolean function from its truth table, then verify the answer by running the generated program. generate turns a table into a program; encode_inputs builds the stdin one input row needs; run executes it; read_answer returns the 0/1 bit. describe reports how a language takes its input and where its answer lands. Languages that embed their inputs in the source return a template to fill with instantiate instead.

Quickstart

A table lists outputs for inputs 00, 01, 10, 11 in order, so 0110 is XOR:

pip install esolangs
esolangs generate brainfuck 0110 > xor.bf
for i in 00 01 10 11; do printf $i | esolangs run brainfuck xor.bf; echo " <- $i"; done
# 0 <- 00
# 1 <- 01
# 1 <- 10
# 0 <- 11

Start with the CLI or Python API. The usage guide covers inputs, templates, answers, and debugging. Limitations records contracts; the roadmap tracks open work.

Command line

python -m pip install esolangs

esolangs --help
esolangs list
esolangs generate Suffolk 0110 > program.txt
printf '01' | esolangs run Suffolk program.txt

esolangs generate brainfuck 0110 > bf.txt
printf '01' | esolangs debug --steps 20 --watch-cell 0 brainfuck bf.txt

The Polynomial interpreter needs the optional mathematics extra: pip install 'esolangs[math]'. PNG loading and saving need pip install 'esolangs[image]'; in-memory raster programs need neither extra.

Python API

import esolangs

program = esolangs.generate("brainfuck", "0110")
stdin = esolangs.encode_inputs("brainfuck", [0, 1])
output = esolangs.run("brainfuck", program, stdin=stdin)
assert esolangs.read_answer("brainfuck", output) == "1"

Use isolated=True for a bounded run on Windows or worker threads.

Use the intended language: Suffolk source may run as brainfuck with a wrong answer. Use encode_inputs to build stdin.

Examples

esolangs generate Sophie 0110 emits 20 characters computing XOR:

;@0{;}{;@0{#1}{#0}},

Feeding it the two adjacent input characters prints their XOR.

Ready-to-run programs for each of the 79 languages with a boolean generator live in examples/.

Implemented languages

Familiar languages include brainfuck, Befunge, Piet, INTERCAL, and Malbolge.

Show all 83 languages

Grid-based Languages

Languages that move a pointer or beam across a 2D grid.

Stack-based Languages

Languages that use a stack for data manipulation.

Queue-based Languages

Languages whose primary data structure is a queue or deque.

Tape-based Languages

Languages that operate on a tape (similar to Turing machines).

Register-based Languages

Languages that use registers to store and manipulate data.

Other Languages

Languages that don't fit into the above categories.

Generators

The truth table is a binary string of length 2**n, most-significant input first; its length implies n, so it isn't passed separately. 79 of the languages have such a generator, some covering only a documented subset of tables.

esolangs list --details marks generators (gen), templates (tmpl), and committed examples (ex). See the usage guide for input conventions and benchmarking.

Contributing

See contributing for setup, verification and the execution path. The project is GPL v3; see LICENSE.

About

Interpreters and Boolean program generators for 81 esoteric languages.

Topics

Resources

Contributing

Security policy

Stars

12 stars

Watchers

1 watching

Forks

Contributors

Languages