fork download
  1. #include <iostream>
  2.  
  3. void bf_run(char const* codeptr, unsigned char* memptr)
  4. {
  5. while(*codeptr)
  6. {
  7. switch(*codeptr)
  8. {
  9. case '.':
  10. std::cout << static_cast<char>(*memptr);
  11. break;
  12.  
  13. case ',':
  14. std::cin.read(reinterpret_cast<char*>(memptr), 1);
  15. break;
  16.  
  17. case '>':
  18. ++memptr;
  19. break;
  20.  
  21. case '<':
  22. --memptr;
  23. break;
  24.  
  25. case '+':
  26. ++*memptr;
  27. break;
  28.  
  29. case '-':
  30. --*memptr;
  31. break;
  32.  
  33. case '[':
  34. ++codeptr;
  35.  
  36. while(*memptr)
  37. bf_run(codeptr, memptr);
  38.  
  39. while(*codeptr && *codeptr != ']')
  40. ++codeptr;
  41.  
  42. break;
  43.  
  44. case ']':
  45. return;
  46.  
  47. default:
  48. break;
  49. }
  50.  
  51. ++codeptr;
  52. }
  53. }
  54.  
  55. int main()
  56. {
  57. char const source[] =
  58. "++++++++++"
  59. "["
  60. ">+++++++>++++++++++>+++>+<<<<-"
  61. "]"
  62. ">++."
  63. ">+."
  64. "+++++++."
  65. "."
  66. "+++."
  67. ">++."
  68. "<<+++++++++++++++."
  69. ">."
  70. "+++."
  71. "------."
  72. "--------."
  73. ">+."
  74. ">."
  75. "+++.";
  76.  
  77. unsigned char memory[1024] = {};
  78.  
  79. bf_run(source, memory);
  80. }
Success #stdin #stdout 0s 2828KB
stdin
Standard input is empty
stdout
Hello World!