Esolangs
Interpreters and compilers for esoteric programming languages, from stack-based to modern register-based systems
Install / Use
/learn @bangyen/EsolangsREADME
Esolang Interpreters
A comprehensive collection of interpreters and compilers for esoteric programming languages (esolangs). This repository contains implementations of various esoteric languages, ranging from classic stack-based languages to modern register-based systems.
Table of Contents
About
Esoteric programming languages are designed to be difficult to program in, often as a form of art or humor. This repository provides working interpreters and compilers for a wide variety of these languages, making them accessible for experimentation and learning.
Most interpreters work by reading the file specified by the first command line argument.
Usage
Running an Interpreter
python interpreter.py program.txt
Running a Compiler
python compiler.py program.txt output.asm
Example: Running a Brainfuck Program
python tape-based/brainif.py hello_world.bf
Implemented Languages
Register-based Languages
Languages that use registers to store and manipulate data.
Tape-based Languages
Languages that operate on a tape (similar to Turing machines).
Stack-based Languages
Languages that use a stack for data manipulation.
Other Languages
Languages that don't fit into the above categories.
Extra Implementations
Implementations written in languages other than Python.
C++ Implementations
x86 Assembly Implementations
Lean Implementations
Ruby Implementations
Rust Implementations
Compilers
Compilers that translate esoteric languages to other target languages.
x86 Assembly Compilers
C Compilers
Tools
Utility programs that work with the esoteric languages.
Binary Function Generator
The binary.py program implements a given boolean function in Dig.
python miscellaneous/binary.py
Program Generator
The generate.py program outputs programs which output a given string in different languages.
Supported languages:
- BFStack
- BrainIf
- Container
- Forþ (Forth)
- LaserFuck
- Painfuck
- Suffolk
- 123
- %^2^-1 (Magnitude)
python miscellaneous/generate.py "Hello, World!"
Notes
Important information about specific language implementations.
Known Issues
-
circlefuck: The
narcissistprogram is the only program for which the interpreter doesn't work. The extendedquineprogram doesn't work because it modifies a+symbol, causing it to increment incorrectly. -
dotlang: The interpreter skips over strings and warp names after parsing them, so printing a string with spaces is possible. If this additional feature seems to be a negative rather than a positive, feel free to create an issue.
Usage Notes
-
Jaune: Only one character can be input at a time.
-
Suffolk: Although the language is specified to run on an infinite loop, a second command line argument may be given to set the number of loops. The default is
10. -
123: Input is given at the end of the program. The two are separated by a single
|.
Contributing
Contributions are welcome! If you find bugs or want to add new language implementations, please feel free to submit issues or pull requests.
License
This project is licensed under the GPL v3 License - see the LICENSE file for details.
