Skip to main content

GitHub Website PyPI - Version

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.

See also the C to FlipJump Compiler.

Download:

>>> pip install bf2fj

Requires python 3.10-3.14.

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 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.

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.

Release files for bf2fj 1.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bf2fj 1.0.4
File Size Uploaded
bf2fj-1.0.4.tar.gz 11.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bf2fj 1.0.4
File Interpreter ABI Platform
bf2fj-1.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 23.5 kB

Release files / bf2fj-1.0.4.tar.gz

Download URL bf2fj-1.0.4.tar.gz
Size 11.2 kB
Tags Source
SHA-256 checksum
How to use checksums
04eb1e2955c726e008c2d944f507b792f7e5598cf990b0737dd7012072b1ddb6
BLAKE2b-256 checksum
How to use checksums
e02156422137db344a955829243b10ea2d51c13f9f7773330fa5e971f290ab7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / bf2fj-1.0.4-py3-none-any.whl

Download URL bf2fj-1.0.4-py3-none-any.whl
Size 12.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8f9f005c5a291d1fbda542827fc44800b55db690f4c2da68295002f227d5bee8
BLAKE2b-256 checksum
How to use checksums
6dd4b2a587f0dda70b0822cd30753c850605a8553f800f892875970e86b91e13
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release history Release notifications | RSS feed

This release

1.0.4 This release

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page