tomhea / bf2fj

A Brainfuck to FlipJump compiler

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

About

A Brainfuck to FlipJump compiler

License:BSD 2-Clause "Simplified" License


Languages

Language:Brainfuck 93.0%Language:Python 7.0%