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

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.

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.0.tar.gz (10.4 kB view hashes)

Uploaded Source

Built Distribution

bf2fj-1.0.0-py3-none-any.whl (11.6 kB view hashes)

Uploaded Python 3

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