A brainfuck to flipjump compiler
Project description
bf2fj
A Brainfuck to FlipJump Compiler.
The compiler was built to be very fast. Moreover, the flipjump programs generated by this project are generated in a way that will keep them very small, thus their compilation into an .fjm file is also fast.
Download:
>>> pip install bf2fj
Run the compiler:
>>> bf2fj hello_world.bf
compile bf->fj: 0.008s
You can also run the created flipjump program.
>>> bf2fj hello_world.bf -r
compile bf->fj: 0.008s
parsing: 0.092s
macro resolve: 0.141s
labels resolve: 0.035s
create binary: 0.143s
loading memory: 0.017s
Hello World!
Finished by looping after 0.739s (337,484 ops executed; 85.36% flips, 98.88% jumps).
Note that you can modify the number of brainfuck cells that'll be reserved in the flipjump file, with -c
/ --cells
.
Optimizations
This compiler supports optimizations of the generated flipjump code.
The optimizations are significant. It lowered the hello_world.bf program from 2,900,990 fj ops to 337,484 fj ops (88% faster).
The major optimizations strategies:
- Optimize multiple data ops:
+++++
=>+5
, and----++-
=>-3
. - Optimize multiple pointer ops:
>>>>>
=>>5
,<<<<>><
=><3
. - Find zeroing loops, and replace them with
*ptr = 0
. If there are data-ops before it, removes them too. *ptr = 0
++5
=>*ptr = 5
.
Tests:
I've gathered many brainfuck programs, and put them all inside the programs/ folder.
The tests compile each of them to flipjump:
>> pytest --compile-only
You can also run the compiled flipjump files (just omit the --compile-only
flag), but I only added the input / expected-output files to only a portion of the tests, so it won't pass.
Licenses:
The programs/ folder has a collection of 3rd party brainfuck programs, taken from multiple open-source websites. Each folder under programs/ has a README.md that specifies were the brainfuck files came from, and to whom we owe the credit.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file bf2fj-1.0.1.tar.gz
.
File metadata
- Download URL: bf2fj-1.0.1.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.0 Linux/6.2.0-1018-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4b6edb868d951c95101a77786c14df1d7660bc0cfdc2c96fed86ec31e6cccd3 |
|
MD5 | 5ee4162f11aff1471a72b1373304b554 |
|
BLAKE2b-256 | 95bbb9cbfc3f561f2387e029536b0039d6d649170574877cf866ebb293bea431 |
File details
Details for the file bf2fj-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: bf2fj-1.0.1-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.0 Linux/6.2.0-1018-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77c2a35e733dd734ac2cef92f3917ad5895fd73ef2d8a982b1113c8ffdff0bd0 |
|
MD5 | ec8bf14869cf8412c3681b091d91e207 |
|
BLAKE2b-256 | 874b6e0fdc27d60c5021b78ea035514aa517aac3ed579518ade45dc8055873d8 |