Skip to main content

A brainfuck to flipjump compiler

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bf2fj-1.0.4.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bf2fj-1.0.4-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file bf2fj-1.0.4.tar.gz.

File metadata

  • Download URL: bf2fj-1.0.4.tar.gz
  • Upload date:
  • Size: 11.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for bf2fj-1.0.4.tar.gz
Algorithm Hash digest
SHA256 04eb1e2955c726e008c2d944f507b792f7e5598cf990b0737dd7012072b1ddb6
MD5 a2e08b969ac4454d17df4e18d8717165
BLAKE2b-256 e02156422137db344a955829243b10ea2d51c13f9f7773330fa5e971f290ab7b

See more details on using hashes here.

File details

Details for the file bf2fj-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: bf2fj-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for bf2fj-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8f9f005c5a291d1fbda542827fc44800b55db690f4c2da68295002f227d5bee8
MD5 9393387af1ae7fb31078b0648a8a6cdb
BLAKE2b-256 6dd4b2a587f0dda70b0822cd30753c850605a8553f800f892875970e86b91e13

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page