Execute Brain**** is an implementation of Brainf***.
Other implementations of Brainf***.
RCBF is a set of Brainf*** compilers and interpreters written for Rosetta Code in a variety of languages.

Below are links to each of the versions of RCBF.

An implementation need only properly implement the following instructions:



Command

Description


 > 
 Move the pointer to the right


 < 
 Move the pointer to the left


 + 
 Increment the memory cell under the pointer


 - 
 Decrement the memory cell under the pointer


 . 
 Output the character signified by the cell at the pointer


 , 
 Input a character and store it in the cell at the pointer


 [ 
 Jump past the matching ] if the cell under the pointer is 0


 ] 
 Jump back to the matching [ if the cell under the pointer is nonzero

Any cell size is allowed,   EOF   (End-O-File)   support is optional, as is whether you have bounded or unbounded memory.




// nanoquery has no function to get just a character
// so we have to implement our own
def get_char()
    c = ""
    while len(c)=0
        c = input()
    end
    return c[0]
end
 
// a function to handle fatal errors
def fatal_error(errtext)
    println "%" + errtext
    println "usage: " + args[1] + " [filename.bf]"
    exit
end
 
// get a filename from the command line and read the file in
fname = null
source = null
try
    fname = args[2]
    source = new(Nanoquery.IO.File, fname).readAll()
catch
    fatal_error("error while trying to read from specified file")
end
 
// start with one hundred cells and the pointer at 0
cells = {0} * 100
ptr   = 0
 
// loop through the instructions
loc = 0
while loc < len(source)
        instr = source[loc]
 
        if instr = ">"
                ptr += 1
                if ptr = len(cells)
                        cells.append(0)
                end
        else if instr = "<"
                ptr -= 1
                if ptr < 0
                        ptr = 0
                end
        else if instr = "+"
                cells[ptr] += 1
        else if instr = "-"
                cells[ptr] -= 1
        else if instr = "."
                print chr(cells[ptr])
        else if instr = ","
                cells[ptr] = ord(get_char())
        else if instr = "["
                if cells[ptr] = 0
                        while source[loc] != "]"
                                loc += 1
                        end
                end
        else if instr = "]"
                if cells[ptr] != 0
                        while source[loc] != "["
                                loc -= 1
                        end
                end
        else
                // do nothing
        end
 
        loc += 1
end