View Single Post
Old 31-01-2011, 08:23   #1
Noixe
Member
 
Iscritto dal: Aug 2008
Messaggi: 51
[C++] Interprete Brainfuck

Ecco un interprete per il linguaggio Brainfuck:

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/b...g/mandelbrot.b

Saluti
Noixe è offline   Rispondi citando il messaggio o parte di esso