Skip to main content

Downloads Downloads Downloads

BFFuck

Makes brainfucking easier

The tools is an esoteric language that compiles to brainfuck, using algorithms in brainfuck algorithms.

Usage:

Run this in Python:

from bffuck import BFFuck
bff=BFFuck()
bf=bff.compile('Your code')

Note that if a BFFuck object is created and used, its status will change and therefore cannot compile another program.

Syntax

BFFuck currently supports the following syntax:

Comment:

# Comment

Raw brainfuck code injection:

bf "BF code" # Raw BF code injection

Variable definition:

<variable 1>=<variable 2>
or
<variable>=<number>

Move instruction:

a->b
b<-a
# These two do the same thing:
# They move the value of a to b (overwriting b's value, and make a 0)
# The same as a=b<LF>b=0, but does point-to-point movement between *existing variables*
# so it's both shorter and faster

Addition:

add(x,<number>)
or
add(x,<variable>)

Subtraction:

sub(x,<number>)
or
sub(x,<variable>)

Multiplication:

mul(x,<number>)
or
mul(x,<variable>)

Floor division:

div(x,<number>)
or
div(x,<variable>)

Modulo:

mod(x,<number>)
or
mod(x,<variable>)

While loop:

while(<variable or number>)
CODE
endwhile

I/O:

<variable>=in # Reads <variable> as decimal integer
<variable>=inc # Reads <variable> as ASCII character
out(<variable or number>) # Outputs <variable> as decimal integer
outc(<variable or number>) # Outputs <variable> as ASCII character

String output shortcut:

print(STRING) # Without quotes
# For instance
print(Hello World!)

If statement:

if(<variable or number>)
CODE
endif

if(<variable or number>)
CODE1
else
CODE2
endif

Comparison:

lt(x,<number>) # Compares x and the variable or number, if x is less than the variable or number, set x to 1, otherwise 0
or
lt(x,<variable>)

eq(x,<number>) # Compares x and the variable or number, if x is equal to the variable or number, set x to 1, otherwise 0
or
eq(x,<variable>)

Macros:

macro $<name> # Macro with no arguments
CODE
endmacro

macro $<name>(<arg1>,<arg2>,...) # Macro with arguments
CODE
endmacro

$<name> # Using a macro with no arguments
$<name>(<arg1>,<arg2>,...) # Using a macro with arguments

Memory:

ptr(a,b) # Store address of a to variable b
ref(a,b) # Store value of address b to variable a
set(a,b) # Set value of address b to a (variable or integer literal)

Libraries

?libraryname

Includes the library library name (with file extension).

It first searches the library in current directory, and then in the stdlib directory in the package.

There are standard libraries for BFFuck, they are:

  • env.bff gets size of a "byte" specified by the compiler
  • alloc.bff allocates memory
  • array.bff manages memory using arrays
  • rng.bff a not very decent random number generator
  • math.bff implements some math functions

An example of the rng.bff library is here:

?rng.bff
x=0
while(1)
$rnd(x)
outc(x)
endwhile

Prints random bytes.

Platform

BFFuck is in pure Python and therefore it supports any platform.

Constraints

Programs compiled from BFFuck needs you to have 8 bit cells that wrap.

Disadvantages

BFFuck currently has these disadvantages:

  1. It's numbers are 8 bit numbers. You can choose 8-bit, 16-bit or 32-bit numbers using the byte keyword argument. But you need to run it on a 8-bit interpreter. REMEMBER: Using numbers with more bits is slower and increases the size of program largely! If you're using 32 bit, remember to use an extremely optimizing interpreter like bffsree!
  2. It has some bugs.

The repository contains some examples, including a Hello World program, a cat program and an A+B program.

Metadata

Release files for bffuck 3.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bffuck 3.1.1
File Size Uploaded Provenance Actions
bffuck-3.1.1.tar.gz 9.6 kB Without provenance Details for bffuck-3.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for bffuck 3.1.1
File Interpreter ABI Platform Actions
bffuck-3.1.1-py3-none-any.whl Python 3 none any Details for bffuck-3.1.1-py3-none-any.whl

Total release size: 20.7 kB

Release files / bffuck-3.1.1.tar.gz

Download URL bffuck-3.1.1.tar.gz
Size 9.6 kB
Tags Source
SHA-256 checksum
How to use checksums
dda955c077c377547b1ffb29a66dd9d6a9ce1a893a901732cb0b8c44af8d6806
BLAKE2b-256 checksum
How to use checksums
fdcce9b1e05090b12989640f3075aa6f3cb5039aa8c491104eaa2bdfeb2abcc3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.7.0

Release files / bffuck-3.1.1-py3-none-any.whl

Download URL bffuck-3.1.1-py3-none-any.whl
Size 11.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fed65e0a806059d8e5dfa907cb95848cafc253cb1ca9df24a09e81e73fdf02b7
BLAKE2b-256 checksum
How to use checksums
81c54df4c55b1475a42ebe11ce92d1422a7fe99e89774bca936c5c4e42f3a5ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.7.0

Security for bffuck 3.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page