Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment