#include #include #include #include #include #include #include using namespace std; typedef map> instrukcia_t; class VM { private: instrukcia_t instrukcie; size_t pozicia_v_programe; size_t pozicia_v_RAM; public: vector RAM; queue program; VM & operator<<(const string & vstup); void spusti(); VM(); }; VM::VM(){ pozicia_v_programe = 0; pozicia_v_RAM = 0; RAM = vector(256, 0); instrukcie["<"] = [this](){ pozicia_v_RAM--; }; instrukcie[">"] = [this](){ pozicia_v_RAM++; }; instrukcie["+"] = [this](){ RAM[pozicia_v_RAM]++; }; instrukcie["-"] = [this](){ RAM[pozicia_v_RAM]--; }; instrukcie["."] = [this](){ cout << RAM[pozicia_v_RAM]; }; } VM & VM::operator<<(const string & vstup){ program = queue(); for (size_t i = 0; i < vstup.length(); i++){ string instrukcia = " "; instrukcia[0] = vstup[i]; program.push(instrukcia); } return *this; } void VM::spusti(){ for ( ; !program.empty(); program.pop()){ string instrukcia = program.front(); instrukcia_t::iterator iterator = instrukcie.find(instrukcia); if (iterator != instrukcie.end()){ iterator->second(); } else{ } } } int main(int argc, char ** argv, char ** env){ VM virtualny_stroj; virtualny_stroj << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>" "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>" "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>" "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>" "<<<<.>.>.>."; /* A - 65 H - 72 O - 79 J - 74 CLR */ virtualny_stroj.spusti(); return 0; }