#include <iostream>
#include <stdint.h>
#include <string>
#include <functional>
#include <map>
#include <vector>
#include <queue>
using namespace std;
typedef map<string, function<void()>> instrukcia_t;
class VM {
private:
instrukcia_t instrukcie;
size_t pozicia_v_programe;
size_t pozicia_v_RAM;
public:
vector<char> RAM;
queue<string> program;
VM & operator<<(const string & vstup);
void spusti();
VM();
};
VM::VM(){
pozicia_v_programe = 0;
pozicia_v_RAM = 0;
RAM = vector<char>(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<string>();
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;
}
Comments