[![GitHub](https://img.shields.io/github/license/tomhea/bf2fj)](LICENSE)
[![Website](https://img.shields.io/website?down_color=red&down_message=down&up_message=up&url=https%3A%2F%2Fesolangs.org%2Fwiki%2FFlipJump)](https://esolangs.org/wiki/FlipJump)
[![PyPI - Version](https://img.shields.io/pypi/v/bf2fj)](https://pypi.org/project/bf2fj/)
# bf2fj
A [Brainfuck](https://esolangs.org/wiki/Brainfuck) to [FlipJump](https://github.com/tomhea/flip-jump) 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.
Raw data
{
"_id": null,
"home_page": "https://esolangs.org/wiki/FlipJump",
"name": "bf2fj",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8.1,<4.0.0",
"maintainer_email": "",
"keywords": "esolang,oisc,assembly",
"author": "Tom Herman",
"author_email": "flipjumpproject@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/95/bb/b9cbfc3f561f2387e029536b0039d6d649170574877cf866ebb293bea431/bf2fj-1.0.1.tar.gz",
"platform": null,
"description": "[![GitHub](https://img.shields.io/github/license/tomhea/bf2fj)](LICENSE)\n[![Website](https://img.shields.io/website?down_color=red&down_message=down&up_message=up&url=https%3A%2F%2Fesolangs.org%2Fwiki%2FFlipJump)](https://esolangs.org/wiki/FlipJump)\n[![PyPI - Version](https://img.shields.io/pypi/v/bf2fj)](https://pypi.org/project/bf2fj/)\n\n# bf2fj\nA [Brainfuck](https://esolangs.org/wiki/Brainfuck) to [FlipJump](https://github.com/tomhea/flip-jump) Compiler.\n\nThe 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. \n\n## Download:\n```\n>>> pip install bf2fj\n```\n\n## Run the compiler:\n\n```\n>>> bf2fj hello_world.bf \n compile bf->fj: 0.008s\n```\n\nYou can also run the created flipjump program.\n```\n>>> bf2fj hello_world.bf -r\n compile bf->fj: 0.008s\n parsing: 0.092s\n macro resolve: 0.141s\n labels resolve: 0.035s\n create binary: 0.143s\n loading memory: 0.017s\nHello World!\n\nFinished by looping after 0.739s (337,484 ops executed; 85.36% flips, 98.88% jumps).\n```\n\nNote that you can modify the number of brainfuck cells that'll be reserved in the flipjump file, with `-c` / `--cells`.\n\n## Optimizations\nThis compiler supports optimizations of the generated flipjump code. \n\nThe optimizations are significant. It lowered the hello_world.bf program from 2,900,990 fj ops to 337,484 fj ops (88% faster).\n\nThe major optimizations strategies:\n- Optimize multiple data ops: `+++++` => `+5`, and `----++-` => `-3`.\n- Optimize multiple pointer ops: `>>>>>` => `>5`, `<<<<>><` => `<3`.\n- Find zeroing loops, and replace them with `*ptr = 0`. If there are data-ops before it, removes them too.\n- `*ptr = 0` + `+5` => `*ptr = 5`.\n\n## Tests:\nI've gathered many brainfuck programs, and put them all inside the programs/ folder. \nThe tests compile each of them to flipjump:\n```\n>> pytest --compile-only\n```\nYou 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.\n\n## Licenses:\nThe 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.\n",
"bugtrack_url": null,
"license": "BSD-2-Clause-Simplified",
"summary": "A brainfuck to flipjump compiler",
"version": "1.0.1",
"project_urls": {
"Homepage": "https://esolangs.org/wiki/FlipJump",
"Repository": "https://github.com/tomhea/bf2fj"
},
"split_keywords": [
"esolang",
"oisc",
"assembly"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "874b6e0fdc27d60c5021b78ea035514aa517aac3ed579518ade45dc8055873d8",
"md5": "ec8bf14869cf8412c3681b091d91e207",
"sha256": "77c2a35e733dd734ac2cef92f3917ad5895fd73ef2d8a982b1113c8ffdff0bd0"
},
"downloads": -1,
"filename": "bf2fj-1.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ec8bf14869cf8412c3681b091d91e207",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8.1,<4.0.0",
"size": 11967,
"upload_time": "2023-12-12T12:20:15",
"upload_time_iso_8601": "2023-12-12T12:20:15.408772Z",
"url": "https://files.pythonhosted.org/packages/87/4b/6e0fdc27d60c5021b78ea035514aa517aac3ed579518ade45dc8055873d8/bf2fj-1.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "95bbb9cbfc3f561f2387e029536b0039d6d649170574877cf866ebb293bea431",
"md5": "5ee4162f11aff1471a72b1373304b554",
"sha256": "f4b6edb868d951c95101a77786c14df1d7660bc0cfdc2c96fed86ec31e6cccd3"
},
"downloads": -1,
"filename": "bf2fj-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "5ee4162f11aff1471a72b1373304b554",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8.1,<4.0.0",
"size": 10943,
"upload_time": "2023-12-12T12:20:16",
"upload_time_iso_8601": "2023-12-12T12:20:16.979468Z",
"url": "https://files.pythonhosted.org/packages/95/bb/b9cbfc3f561f2387e029536b0039d6d649170574877cf866ebb293bea431/bf2fj-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-12 12:20:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tomhea",
"github_project": "bf2fj",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "bf2fj"
}