Interpreter for the Brainfuck esoteric language
The following features are supported:
- Almost unlimited number of cells. The ECMA specification for the maximum array length is an unsigned 32-bit
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 is
2*(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:
- It doesn't recognize the token
!. There's a cli option to enter an input string.
|>||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> an> bo> cp
Send a SIGINT signal (ctrl+c) to kill the process.
$ brainfuck -hUsage: 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 exitReport bugs to <email@example.com>.
$ brainfuck examples/reverse -i abccba
Note: If the file doesn't exist and doesn't have an extension, it tries to read the same file with the extension
module(code[, input]) : undefined
Executes the given code.
var bf = require'brainless';bf',[>,]<[.<]' 'abc';// cba