Makes brainfucking easier
The tools is an esoteric language that compiles to brainfuck, using algorithms in brainfuck algorithms.
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.
BFFuck currently supports the following syntax:
Comment:
# Comment
Variable definition:
<variable 1>=<variable 2>
or
<variable>=<number>
Addition:
add(x,<number>)
or
add(x,<variable>)
Subtraction:
sub(x,<number>)
or
sub(x,<variable>)
Multiplication:
mul(x,<number>)
or
mul(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 compileralloc.bff
allocates memoryarray.bff
manages memory using arraysrng.bff
a not very decent random number generator
An example of the rng.bff
library is here:
?rng.bff
x=0
while(1)
$rnd(x)
outc(x)
endwhile
Prints random bytes.
BFFuck is in pure Python and therefore it supports any platform.
Programs compiled from BFFuck needs you to have 8 bit cells that wrap.
BFFuck currently has these disadvantages:
It's numbers are 8 bit numbers.You can choose 8-bit, 16-bit or 32-bit numbers using thebyte
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!- It has some bugs.
The repository contains some examples, including a Hello World program, a cat program and an A+B program.