Ecco un interprete per il linguaggio Brainfuck:
In questo sito ci sono dei sorgenti da provare: http://esoteric.sange.fi/brainfuck/bf-source/prog
Mi è piacuto molto questo: http://esoteric.sange.fi/brainfuck/bf-source/prog/mandelbrot.b
Saluti
Codice:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
vector<char> Istruzioni, Vettore;
int main (int argc, char* argv[]) {
ifstream input (argv[1], ios_base::in);
string str;
int indice = 0;
do {
getline(input, str, '\n');
for (int i = 0; i < str.size(); i++)
Istruzioni.push_back(str[i]);
}
while (!input.eof());
input.close();
Vettore.resize(Istruzioni.size());
for (int i = 0; i < Istruzioni.size(); i++) {
switch (Istruzioni[i]) {
case '>' :
if (indice < Vettore.size() - 1)
indice++;
break;
case '<' :
if (indice > 0)
indice--;
break;
case '+' :
Vettore[indice]++;
break;
case '-' :
if (Vettore[indice] > 0)
Vettore[indice]--;
break;
case '.' :
putchar(Vettore[indice]);
break;
case ',' :
Vettore[indice] = getchar();
break;
case '[' :
if (!Vettore[indice]) {
int quadre = 0;
while (i < Istruzioni.size()) {
if (Istruzioni[i] == '[')
quadre++;
else
if (Istruzioni[i] == ']')
quadre--;
i++;
if (quadre == 0) {
i--;
break;
};
};
};
break;
case ']' :
if (Vettore[indice]) {
int quadre = 0;
while (i >= 0) {
if (Istruzioni[i] == '[')
quadre++;
else
if (Istruzioni[i] == ']')
quadre--;
i--;
if (quadre == 0) {
i++;
break;
};
};
};
break;
};
};
return 0;
}
In questo sito ci sono dei sorgenti da provare: http://esoteric.sange.fi/brainfuck/bf-source/prog
Mi è piacuto molto questo: http://esoteric.sange.fi/brainfuck/bf-source/prog/mandelbrot.b
Saluti