Advertisement
KoMeDiAnT

WSHVirtualMachine

Apr 7th, 2017
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Array.prototype.findAndReturnIndex = function (element) {
  2.     var array = Object(this);
  3.  
  4.     for (var i = 0; i < array.length; i++){
  5.         if (array[i] === element)
  6.             return i;
  7.     }
  8.  
  9.     return -1;
  10. };
  11.  
  12. function main() {
  13.     var fso = new ActiveXObject("Scripting.FileSystemObject")
  14.     var ts = fso.OpenTextFile(WSH.arguments(0))
  15.     var inputData = ts.ReadAll()
  16.    
  17.     if (inputData.length === 0){
  18.         WSH.echo('Wrong input file!')
  19.         return;
  20.     }
  21.  
  22.     inputData += ' exit';
  23.  
  24.     var memory = inputData.split(/\s+/);
  25.  
  26.     var ip = 0;
  27.     var dif = 0;
  28.  
  29.     for (var i = 0; i < memory.length; i++){
  30.         WSH.echo('В ячейке ', i, ' хранится ', memory[i]);
  31.     }
  32.  
  33.     while(memory[ip] !== 'exit'){
  34.         switch (memory[ip]){
  35.             case 'input':
  36.                 WSH.echo('Type number');
  37.                 memory[memory[ip + 1]] = parseFloat(WScript.StdIn.ReadLine());
  38.                 ip += 2;
  39.                 break;
  40.             case 'output':
  41.                 WSH.echo('Result: ' + memory[memory[ip + 1]]);
  42.                 ip += 2;
  43.                 break;
  44.             case 'plus':
  45.                 memory[memory[ip + 1]] = memory[memory[ip + 3]] + memory[memory[ip + 2]];
  46.                 ip += 4;
  47.                 break;
  48.             case 'multiplication':
  49.                 memory[memory[ip + 1]] = memory[memory[ip + 3]] * memory[memory[ip + 2]];
  50.                 ip += 4;
  51.                 break;
  52.             case 'mod':
  53.                 memory[memory[ip + 1]] = memory[memory[ip + 2]] % memory[memory[ip + 3]];
  54.                 ip += 4;
  55.                 break;
  56.             case 'mov':
  57.                 memory[memory[ip + 1]] = Number(memory[ip + 2]);
  58.                 ip += 3;
  59.                 break;
  60.             case 'assign':
  61.                 memory[memory[ip + 1]] = memory[memory[ip + 2]];
  62.                 ip += 3;
  63.                 break;     
  64.             case 'dif':
  65.                 dif = memory[memory[ip + 1]] -  memory[memory[ip + 2]];
  66.                 ip += 3;
  67.                 break;
  68.             case 'jump':
  69.                 ip = memory.findAndReturnIndex(memory[ip + 1] + ':') + 1;
  70.                 break;
  71.             case 'jumpLarge':
  72.                 if (dif > 0){
  73.                     ip = memory.findAndReturnIndex(memory[ip + 1] + ':') + 1;
  74.                 }
  75.                 else
  76.                 {
  77.                     ip += 2;
  78.                 }
  79.                 break;
  80.             case 'jumpEqual':
  81.                 if (dif === 0){
  82.                     ip = memory.findAndReturnIndex(memory[ip + 1] + ':') + 1;
  83.                 }
  84.                 else
  85.                 {
  86.                     ip += 2;
  87.                 }
  88.                 break;
  89.             case 'equal':
  90.                 if (memory[memory[ip + 1]] === memory[memory[ip + 2]]){
  91.                     ip = memory[ip + 3];
  92.                 }
  93.                 else{
  94.                     ip += 4;
  95.                 }
  96.                 break;
  97.             case 'unequal':
  98.                 if (memory[memory[ip + 1]] !== memory[memory[ip + 2]]){
  99.                     ip = memory[ip + 3]
  100.                 }
  101.                 else{
  102.                     ip += 4;
  103.                 }
  104.                 break;
  105.             case 'exit':
  106.                 return;
  107.             default:
  108.                 if (memory[ip].charAt(memory[ip].length - 1) === ':')
  109.                 {
  110.                     ip += 1
  111.                 }
  112.                 break;
  113.         }
  114.     }
  115. }
  116.  
  117. main();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement