soulik

Simple

Mar 7th, 2016
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdint.h>
  3. #include <string>
  4. #include <functional>
  5. #include <map>
  6. #include <vector>
  7. #include <queue>
  8.  
  9. using namespace std;
  10.  
  11. typedef map<string, function<void()>> instrukcia_t;
  12.  
  13. class VM {
  14. private:
  15.     instrukcia_t instrukcie;
  16.     size_t pozicia_v_programe;
  17.     size_t pozicia_v_RAM;
  18.  
  19. public:
  20.     vector<char> RAM;
  21.     queue<string> program;
  22.  
  23.     VM & operator<<(const string & vstup);
  24.  
  25.     void spusti();
  26.    
  27.     VM();
  28. };
  29.  
  30. VM::VM(){
  31.     pozicia_v_programe = 0;
  32.     pozicia_v_RAM = 0;
  33.     RAM = vector<char>(256, 0);
  34.    
  35.     instrukcie["<"] = [this](){
  36.         pozicia_v_RAM--;
  37.     };
  38.     instrukcie[">"] = [this](){
  39.         pozicia_v_RAM++;
  40.     };
  41.     instrukcie["+"] = [this](){
  42.         RAM[pozicia_v_RAM]++;
  43.     };
  44.     instrukcie["-"] = [this](){
  45.         RAM[pozicia_v_RAM]--;
  46.     };
  47.     instrukcie["."] = [this](){
  48.         cout << RAM[pozicia_v_RAM];
  49.     };
  50. }
  51.  
  52. VM & VM::operator<<(const string & vstup){
  53.     program = queue<string>();
  54.     for (size_t i = 0; i < vstup.length(); i++){
  55.         string instrukcia = " ";
  56.         instrukcia[0] = vstup[i];
  57.         program.push(instrukcia);
  58.     }
  59.     return *this;
  60. }
  61.  
  62. void VM::spusti(){
  63.     for ( ; !program.empty(); program.pop()){
  64.         string instrukcia = program.front();
  65.        
  66.         instrukcia_t::iterator iterator = instrukcie.find(instrukcia);
  67.  
  68.         if (iterator != instrukcie.end()){
  69.             iterator->second();
  70.         }
  71.         else{
  72.         }
  73.     }
  74. }
  75.  
  76. int main(int argc, char ** argv, char ** env){
  77.     VM virtualny_stroj;
  78.     virtualny_stroj <<
  79.         "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>"
  80.         "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>"
  81.         "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>"
  82.         "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>"
  83.         "<<<<.>.>.>.";
  84.     /*
  85.     A - 65
  86.     H - 72
  87.     O - 79
  88.     J - 74
  89.  
  90.     CLR
  91.     */
  92.  
  93.     virtualny_stroj.spusti();
  94.  
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment