#include #include #include "mem.h" #include "stack.h" #include "bfi.h" #ifdef DEBUG #define PRINT_PARAMS "'%c' (kood = %d)\n", c, c #else #define PRINT_PARAMS "%c", c #endif void intepret(char *program){ int i = 0; int length = 0; while (program[i++] != '\0') length++; i = 0; while (i < length){ //printf("i = %d\n",i); //printf("%c\n", program[i]); switch(program[i]) { case BF_READ: { /* Loeme märgi standardsisendist (kasutaja sisestab konsooli). */ int c = getc(stdin); if (EOF == c) { /* Sisendi lõpu korral lõpetame interpretaatori töö. */ printf("Sisendi lõpp!\n"); return; } /* Lisame mällu loetud väärtuse. */ mem_set((char) c); break; } case BF_RIGHT: { mem_right(); break; } case BF_LEFT: { mem_left(); break; } case BF_INCREASE: { mem_inc(); break; } case BF_DECREASE: { mem_dec(); break; } case BF_PRINT: { char c = mem_get(); printf(PRINT_PARAMS); break; } case BF_START_LOOP: { stackPush(i); int memVal = mem_get(); //Skiping loop if (memVal == 0){ int helpCounter = 1; while (helpCounter != 0){ i++; if (program[i] == '[') helpCounter++; if (program[i] == ']') helpCounter--; } stackPop(); } break; } case BF_END_LOOP: { if (mem_get() != 0){ i = stackPop(); stackPush(i); } else stackPop(); break; } } // Switch end i++; } // While loop end }