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.
See also the C to FlipJump Compiler.
Try It Online at the FlipJump IDE, and read more at the FlipJump Docs.
>>> pip install bf2fj
Requires Python 3.10-3.14.
>>> 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.
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 optimization 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, remove them too. *ptr = 0++5=>*ptr = 5.
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 and verify their output (just omit the --compile-only flag).
Programs without input / expected-output files are skipped in this mode (they only get compile-tested),
and a few programs that are known to be unsupported are marked as expected-failures (see KNOWN_RUN_FAILURES in tests/test_cases.py).
Note that some of the programs (e.g. the quines) take many minutes to run.
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 where the brainfuck files came from, and to whom we owe the credit.