Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. public class Interpreter
  2. {
  3. public byte[] tape;
  4. public int pointer;
  5. public char[] input;
  6.  
  7. public Interpreter(string input)
  8. {
  9. this.input = input.ToCharArray();
  10. tape = new byte[30000];
  11. }
  12.  
  13. public void Run()
  14. {
  15. var unmatchedBracketCounter = 0;
  16. for (int i = 0; i < input.Length; i++)
  17. {
  18. switch (input[i])
  19. {
  20. case '>':
  21. pointer++;
  22. break;
  23. case '<':
  24. pointer--;
  25. break;
  26. case '+':
  27. tape[pointer]++;
  28. break;
  29. case '-':
  30. tape[pointer]--;
  31. break;
  32. case '.':
  33. Console.Write(Convert.ToChar(tape[pointer]));
  34. break;
  35. case ',':
  36. var key = Console.ReadKey();
  37. tape[pointer] = (byte)key.KeyChar;
  38. break;
  39. case '[':
  40. if (tape[pointer] == 0)
  41. {
  42. unmatchedBracketCounter++;
  43. while (input[i] != ']' || unmatchedBracketCounter != 0)
  44. {
  45. i++;
  46.  
  47. if (input[i] == '[')
  48. {
  49. unmatchedBracketCounter++;
  50. }
  51. else if (input[i] == ']')
  52. {
  53. unmatchedBracketCounter--;
  54. }
  55. }
  56. }
  57. break;
  58. case ']':
  59. if (tape[pointer] != 0)
  60. {
  61. unmatchedBracketCounter++;
  62. while (input[i] != '[' || unmatchedBracketCounter != 0)
  63. {
  64. i--;
  65.  
  66. if (input[i] == ']')
  67. {
  68. unmatchedBracketCounter++;
  69. }
  70. else if (input[i] == '[')
  71. {
  72. unmatchedBracketCounter--;
  73. }
  74. }
  75. }
  76. break;
  77. }
  78. }
  79. }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement