The following features are supported:
- Almost unlimited number of cells. The ECMA specification for the maximum array length is an unsigned 32-bit
integer,
2^32-1 = 4,294,967,295 cells
.
Negative pointer values are also valid, but they are stored in a separate tape. This means that the total tape length is2*(2^32-1) = 8,589,934,590 cells
.
The state of the program when the pointer is outside these valid ranges is undefined. - Each cell stores an IEEE 754 double-precision integer (64 bits), so negative numbers and UTF8 multibyte characters are allowed.
- It recognizes the usual tokens, but adds the de-facto
#
for debugging purposes. Prints a json object to the stdout, something similar to this:{"pointer":-1,"tape":{"p":[97,98,99,0],"n":[null,0]}}
. - It doesn't recognize the token
!
. There's a cli option to enter an input string.
Tokens:
> | Increments the pointer. |
< | Decrements the pointer. |
+ | Increments the cell value where points the pointer. |
- | Decrements the cell value where points the pointer. |
. | Outputs to the stdout the UTF8 character stored in the cell where points the pointer. |
, | Reads a UTF8 character and stores it in the cell where points the pointer. |
[ | If the value in the cell where points the pointer is 0, it jumps to the ] token, otherwise it executes the code inside [ and ]. |
] | If the value in the cell where points the pointer is not 0, it jumps back again to the [ token, otherwise it continues with the program execution. |
# | Outputs the pointer and the state of the tape. For debugging purposes. |
If the program needs to read an input value but no string is provided, it prompts a cli message asking for a character:
$ brainfuck examples/rot13
> a
n
> b
o
> c
p
Send a SIGINT signal (ctrl+c) to kill the process.
CLI
$ brainfuck -h
Usage: brainfuck [options] <input_file>
Interpreter for the Brainfuck esoteric language
-i, --input=STRING STRING to read during the program execution
-h, --help Display this help message and exit
-v, --version Output version information and exit
Report bugs to <gagle@outlook.com>.
For example:
$ brainfuck examples/reverse -i abc
cba
Note: If the file doesn't exist and doesn't have an extension, it tries to read the same file with the extension .bf
.
Programmatically
module(code[, input]) : undefined
Executes the given code.
var bf = require('brainless');
bf(',[>,]<[.<]', 'abc');
// cba