#include <iostream>
#include <fstream>
std::string read(std::fstream&& file)
{
std::string temp;
while (file >> temp) {
}
file.close();
return temp;
}
int main(int argc, char** argv)
{
std::fstream file;
if (argc != 1) {
file.open(argv[1]);
}
else {
std::cerr << "Enter the patch to the *.by file";
return 1;
}
if (!file) {
std::cerr << "Unable to open file";
return 2;
}
const char* program = read(std::move(file)).c_str();
char data[1000];
char* i = data;
while (*program) {
switch (*program) {
case '>':
++i;
break;
case '<':
--i;
break;
case '+':
++(*i);
break;
case '-':
--(*i);
break;
case '.':
std::cout << *i;
break;
case ',':
*i = std::cin.get();
break;
case '[': {
if (*i == 0) {
int loops = 1;
while (loops != 0) {
++program;
if (*program == ']')
--loops;
if (*program == '[')
++loops;
}
}
} break;
case ']': {
int loops = 0;
while (loops != 0) {
++program;
if (*program == '[')
++loops;
if (*program == ']')
--loops;
}
}
}
++program;
}
}
Testuje na tym kodzie:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Niestety nic nie wypisuje. Ścieżka na pewno jest dobra