Brainfuck CLI Interpreter
NodeJS Brainfuck and Brainfuck ♭ console interpreter
Install and use
Prerequisites
- NodeJS
Install
npm i -g bfrun
Use
Command | Properties | Description |
---|---|---|
start <file> | --verbose | Runs brainfuck file |
debug <file> | --verbose | Debug brainfuck project, add * to add a debug breakpoint |
test <spec file> <to eval file> | Unit test a brainfuck file with brainfuck, compare the memory result | |
help | Help from the CLI |
Brainfuck Flat (BFF / B♭)
BFF is a Brainfuck derivative inspired by Brainfuck++, it expands standard Brainfuck in two ways:
- Having two different memory arrays
a. Theregister
array has a fixed 16 cells
b. The standardmemory
has a dynamic length, it doubles everytime the memory pointer moves past its length - Adds this commands:
Command | Specification |
---|---|
^ | Swaps between memory strip and registers strip. |
# | Reads filename until a null byte is reached, input buffer will now be said file, pointer returns to original cell. If file doesn't exists the program will exit. |
: | Reads filename until a null byte is reached, dumps all non-zero memory except filename in said file. If file doesn't exists the program will exit. |
:: | Reads filename until a null byte is reached, writes file with no content, if a file already existis it will replace it. |
Unit testing
Now you can unit test a brainfuck file with another brainfuck file!
To use it first create a new brainfuck file, preferably name it like the file you want to test with a _spec
after the name and with extension .bf
.
Inside the file start with the input to test and finish the input with a !
, everything before the exclamation mark will be read as input for the evaluated BF.
Insert in memory the final memory dump you expect on the evaluated file. Example: This an example of addition of a + 2 sum_spec.bf
3!++++++++++++++++++++++++++++++++++++++++++++++++++++
sum.bf
,>++[<+>-]
Then run the command bfrun test sum_spec.bf sum.bf
(If you want header comments on your spec file add it after the exclamation mark)