Brainfuck consists of only eight simple commands and an instruction pointer. While it is fully Turing-complete, it is not intended for practical use, but to challenge and amuse programmers.
BrainFuck consists of 8 character commands only which makes its use very challenging even for simple tasks –
>command increments the data pointer (to point to the next cell to the right).
<command decrements the data pointer (to point to the next cell to the left).
+command increments (increase by one) the byte at the data pointer.
-command decrements (decrease by one) the byte at the data pointer.
.command outputs the byte at the data pointer.
,command accept one byte of input, storing its value in the byte at the data pointer.
[– if the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching
]– if the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching
- (Alternatively, the
]command may instead be translated as an unconditional jump to the corresponding
[command, or vice versa; programs will behave the same but will run more slowly, due to unnecessary double searching.)
]match as parentheses usually do: each
[matches exactly one
]and vice versa, the
[comes first, and there can be no unmatched
]between the two.
Since BrainFuck consists of only these 8 commands, building an interpreter for BrainFuck is quite simple. In this article, we will build a simple program which takes a BrainFuck code as input and produces the desired output. We will simply accept the BrainFuck code as a String and produce the output by parsing the String and checking every character for its actual functionality. The memory is represented by an array of byte type simulating memory of max 65535 bits from 0 to 65534(65535 is the highest number which can be represented by an unsigned 16-bit binary number). The variable ptr refers to the current index of the memory array.
In this article, we won’t be discussing the details of writing programs in BrainFuck.For more details on writing BrainFuck programs, refer to the following links:
--[+++++++>-->+>+>+<<<->---.>--..>+.<<<.+>->>.+++[.<]Output : Hello World! Input :
++++++++++[>+++++++>++++++++>+++<+++.>++..<+.Output : GEEKS FOR GEEKS
Java Implementation of the BrainFuck Interpreter-
Enter the code: --[+++++++>-->+>+>+<<<->---.>--..>+.<<<.+>->>.+++[.<] Output: Hello World!
Enter the code: ++++++++++[>+++++++>++++++++>+++<+++.>++..<+. Output: GEEKS FOR GEEKS
This article is contributed by Soumik Rakshit. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready.