PageRenderTime 24ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/am/ik/brainfuck/BFProcessor.java

https://github.com/making/jbf
Java | 114 lines | 87 code | 3 blank | 24 comment | 8 complexity | 58c4871ac811d30bceea78e08fcecc36 MD5 | raw file
  1. package am.ik.brainfuck;
  2. import java.io.IOException;
  3. public enum BFProcessor {
  4. /**
  5. * >
  6. */
  7. INCREMENT_POINTER {
  8. @Override
  9. public void process(BFEnvironment env) {
  10. env.incrementPointer();
  11. }
  12. },
  13. /**
  14. * <
  15. */
  16. DECREMENT_POINTER {
  17. @Override
  18. public void process(BFEnvironment env) {
  19. env.decrementPointer();
  20. }
  21. },
  22. /**
  23. * +
  24. */
  25. INCREMENT_VALUE {
  26. @Override
  27. public void process(BFEnvironment env) {
  28. env.incrementValue();
  29. }
  30. },
  31. /**
  32. * -
  33. */
  34. DECREMENT_VALUE {
  35. @Override
  36. public void process(BFEnvironment env) {
  37. env.decrementValue();
  38. }
  39. },
  40. /**
  41. * .
  42. */
  43. WRITE_VALUE {
  44. @Override
  45. public void process(BFEnvironment env) {
  46. env.getOut().print((char) env.getValue());
  47. }
  48. },
  49. /**
  50. * ,
  51. */
  52. READ_VALUE {
  53. @Override
  54. public void process(BFEnvironment env) {
  55. try {
  56. env.setValue(env.getIn().read());
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. },
  62. /**
  63. * [
  64. */
  65. FORWARD {
  66. @Override
  67. public void process(BFEnvironment env) {
  68. if (env.getValue() == 0) {
  69. env.incrementCurrent();
  70. for (int brackets = 1; brackets > 0; env.incrementCurrent()) {
  71. switch (env.getChar()) {
  72. case '[':
  73. brackets++;
  74. break;
  75. case ']':
  76. brackets--;
  77. break;
  78. default:
  79. break;
  80. }
  81. }
  82. env.decrementCurrent();
  83. }
  84. }
  85. },
  86. /**
  87. * ]
  88. */
  89. BACKWARD {
  90. @Override
  91. public void process(BFEnvironment env) {
  92. if (env.getValue() != 0) {
  93. env.decrementCurrent();
  94. for (int brackets = 1; brackets > 0; env.decrementCurrent()) {
  95. switch (env.getChar()) {
  96. case '[':
  97. brackets--;
  98. break;
  99. case ']':
  100. brackets++;
  101. break;
  102. default:
  103. break;
  104. }
  105. }
  106. env.incrementCurrent();
  107. }
  108. }
  109. };
  110. abstract public void process(BFEnvironment env);
  111. }