brainless

Interpreter for the Brainfuck esoteric language

npm install brainless
11 downloads in the last week
20 downloads in the last month

brainfuck

Interpreter for the Brainfuck esoteric language

NPM version Dependency Status

NPM installation

Wikipedia page.

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 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: {"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.

Installation

npm install -g brainless

Usage

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

var bf = require ("brainless");
bf (",[>,]<[.<]", "abc");
//cba
npm loves you