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.

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


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.1.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

bf2fj-1.0.1-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

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

Hashes for bf2fj-1.0.1.tar.gz
Algorithm Hash digest
SHA256 f4b6edb868d951c95101a77786c14df1d7660bc0cfdc2c96fed86ec31e6cccd3
MD5 5ee4162f11aff1471a72b1373304b554
BLAKE2b-256 95bbb9cbfc3f561f2387e029536b0039d6d649170574877cf866ebb293bea431

See more details on using hashes here.

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

Hashes for bf2fj-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 77c2a35e733dd734ac2cef92f3917ad5895fd73ef2d8a982b1113c8ffdff0bd0
MD5 ec8bf14869cf8412c3681b091d91e207
BLAKE2b-256 874b6e0fdc27d60c5021b78ea035514aa517aac3ed579518ade45dc8055873d8

See more details on using hashes here.

Supported by

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