#include <iostream>

void bf_run(char const* codeptr, unsigned char* memptr)
{
	while(*codeptr)
	{
		switch(*codeptr)
		{
		case '.':
			std::cout << static_cast<char>(*memptr);
			break;

		case ',':
			std::cin.read(reinterpret_cast<char*>(memptr), 1);
			break;

		case '>':
			++memptr;
			break;

		case '<':
			--memptr;
			break;

		case '+':
			++*memptr;
			break;

		case '-':
			--*memptr;
			break;

		case '[':
			++codeptr;

			while(*memptr)
				bf_run(codeptr, memptr);

			while(*codeptr && *codeptr != ']')
				++codeptr;

			break;

		case ']':
			return;

		default:
			break;
		}

		++codeptr;
	}
}

int main()
{
	char const source[] =
	"++++++++++"
	"["
	">+++++++>++++++++++>+++>+<<<<-"
	"]"
	">++."
	">+."
	"+++++++."
	"."
	"+++."
	">++."
	"<<+++++++++++++++."
	">."
	"+++."
	"------."
	"--------."
	">+."
	">."
	"+++.";

	unsigned char memory[1024] = {};

	bf_run(source, memory);
}