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

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

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: bf2fj-1.0.2.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.0.1 CPython/3.11.0 Linux/6.8.0-1017-azure

File hashes

Hashes for bf2fj-1.0.2.tar.gz
Algorithm Hash digest
SHA256 4cb24b66ac00059edb6539f1a510ee7e73e446705cd930125bdd102e49179228
MD5 4265b6405cbc2588b4d348f5abddf852
BLAKE2b-256 6b631b53056833e0a207a6bcee7f6cc7a2653aa2771aba48feed1ad223111057

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bf2fj-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.0.1 CPython/3.11.0 Linux/6.8.0-1017-azure

File hashes

Hashes for bf2fj-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2ac106f2d2249a9bb95469c891f9a95cd211d8e61fde39ffb10d087947b6dc5f
MD5 8f760c1bb3f9054da319dadac6e0409e
BLAKE2b-256 80f2d6e919310a28938b28013268386e25d4c84fc523e6e4292d6f3e937b5d87

See more details on using hashes here.

Supported by

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