Talk:BrainFlow
Jump to navigation
Jump to search
C++ interpreter
#include <iostream>
// Variables
/* Code: Change this */ unsigned char code[] = "";
unsigned char tape[255]; // Tape
unsigned char pointer = 0; // Pointer of the tape
unsigned short loops[50]; // Brackets positions
unsigned char loop = 0; // Pointer of the brackets
unsigned char iloop;
bool runCode = true;
// Coded by: DmilkaSTD
int main()
{
// Read avery character
for(unsigned short index = 0; index < sizeof(code); ++index) {
switch(code[index]) {
case 43: // +
// Incremets the current cell
if(runCode) {++tape[pointer];}
break;
case 45: // -
// Decrements the current cell
if(runCode) {--tape[pointer];}
break;
case 60: // >
// Move pointer to right
if(runCode) {++pointer;}
break;
case 62: // <
// Move pointer to left
if(runCode) {--pointer;}
break;
case 46: // .
// Outputs the current cell value (is a char so)
if(runCode) {std::cout<<tape[pointer];}
break;
case 44: // ,
// Get inputs and stores it in the current cell
if(runCode) {std::cin>>tape[pointer];}
break;
case 91: // [
// Stores actual index position
if(runCode) {
++loop;
loops[loop] = index;
if(tape[pointer] == 0) {
runCode = false;
iloop = loop;
}
} else {++loop;}
break;
case 93: // ]
// Jumps to the last saved index position if the current cell is not 0
if(runCode) {
if(tape[pointer] == 0) {--loop;}
else {index = loops[loop];}
} else {if(loop > iloop) {--loop;}
else {runCode = true; --loop;}}
break;
// New commands
case 94: // ^
// Sets the pointer to the value of the current cell
pointer = tape[pointer];
break;
case 61: // ^
// Sets the current cell to the pointer's value
tape[pointer] = pointer;
break;
case 38: // &
// Im not going to explain this.
tape[pointer] = tape[tape[pointer]];
break;
}
}
}