Brainfuck
October 4, 2011
In 1993, Urban Müller invented the brainfuck programming language, which is a simple-minded programming language, similar to a Turing machine, with a very terse syntax. The data store consists of 30000 cells, each a single byte initialized to 0; a data pointer points to one of the cells. Programs consist of the eight characters +-.,[]
with the following meanings:
<
move the data pointer one cell left
>
move the data pointer one cell right
+
increment the cell at the current data pointer
-
decrement the cell at the current data pointer
.
output the cell at the current data pointer as a character
,
input the next character to the cell at the current data pointer
[
if the cell at the current data pointer is zero, move the instruction pointer to the matching]
]
move the instruction pointer to the matching[
The brainfuck interpreter runs through a program performing each instruction as it appears, ignoring all characters other then +-.,[]
, advancing the instruction pointer after each instruction (including after [
and ]
); a program halts by running off its end. Here’s a sample brainfuck program, which prints “Hello World!” when it is run; additional sample programs appear on the next page:
++++++++++[>+++++++>++++++++++>+++>+<
<<<-]>++.>+.+++++++..+++.>++.<<++++++
+++++++++.>.+++.------.--------.>+.>.
Your task is to write a brainfuck interpreter. When you are finished, you are welcome to read or run a suggested solution, or to post your own solution or discuss the exercise in the comments below.