diff --git a/a3/program.exe b/a3/program.exe new file mode 100644 index 0000000..e69de29 diff --git a/sk4/Makefile b/sk4/Makefile new file mode 100644 index 0000000..e2b5001 --- /dev/null +++ b/sk4/Makefile @@ -0,0 +1,3 @@ +all: program.c + gcc program.c -o program + diff --git a/sk4/Meno.txt b/sk4/Meno.txt new file mode 100644 index 0000000..79e3bae --- /dev/null +++ b/sk4/Meno.txt @@ -0,0 +1,15 @@ +TUK +INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK PUK +INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK PUK +INK INK INK PUK +INK INK INK INK INK INK INK INK INK INK INK PUK +BREK +INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK PUK +GLEK +DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK PUK +INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK PUK +DEK DEK DEK DEK DEK DEK DEK DEK DEK PUK 102 +INK INK INK PUK 105 +INK INK INK INK INK INK INK INK INK PUK 114 +DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK PUK 97 +FUK \ No newline at end of file diff --git a/sk4/kod.txt b/sk4/kod.txt new file mode 100644 index 0000000..db4d52b --- /dev/null +++ b/sk4/kod.txt @@ -0,0 +1,18 @@ +TUK +INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK PUK +INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK PUK +INK INK INK PUK +INK INK INK INK INK INK INK INK INK INK INK PUK 111 +INK INK INK INK INK INK INK PUK +DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK PUK +INK INK INK INK INK INK INK INK INK INK INK INK INK PUK 110 +BREK +INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK PUK +GLEK +DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK PUK +INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK INK PUK +DEK DEK DEK DEK DEK DEK DEK DEK DEK PUK +INK INK INK PUK +INK INK INK INK INK INK INK INK INK PUK +DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK PUK +FUK \ No newline at end of file diff --git a/sk4/program.c b/sk4/program.c index f37978d..53df72a 100644 --- a/sk4/program.c +++ b/sk4/program.c @@ -1,47 +1,239 @@ #include #include #include +#include -unsigned char tape[30000] = {0}; -unsigned char* ptr = tape; +typedef enum { +INK, DEK,//Enum je pouzity , +BREK, GLEK,//polia 2 rozmerne atd +PUK, KUK, +LP, RP, +TUK, FUK +}inst; -void interpret(char* input) { +char dtape[30000] = {0};//hlava dh +inst ptape[30000] = {0};//hlava ph +size_t validRP[15000]={0}; + +inst* loops[2][15000] = {{0},{0}};//adresy zatvoriek +size_t loopscount=0;//v globalnych premennych su ulozene udaje z pasky +char* dhead = dtape;//smerniky +inst* phead = ptape; + + +void run_tukafuk(const char* code) { char current_char; + bool running = false; size_t i; - size_t loop; - - for (i = 0; input[i] != 0; i++) { - current_char = input[i]; - if (current_char == 'TUK') {// - ++ptr; - } else if (current_char == 'FUK') {// - --ptr; - } else if (current_char == 'INK') {//+ - ++*ptr; - } else if (current_char == 'DEK') {//- - --*ptr; - } else if (current_char == 'PUK' ) {//. - putchar(*ptr); - } else if (current_char == 'KUK') {//, - *ptr = getchar(); - } else if (current_char == '[') {// - continue; - } else if (current_char == ']' && *ptr) {// - loop = 1; - while (loop > 0) { - current_char = input[--i]; - if (current_char == '[') { - loop--; - } else if (current_char == ']') { - loop++; + for (i = 0; code[i] != 0; i++){ + current_char = code[i]; + size_t j; + size_t loop; + switch(current_char){ + case 'T': + if(code[i+1]=='U') + if(code[i+2]=='K'){ + *phead = TUK; + phead++; + i+=2; + } + break; + case 'I': + if(code[i+1]=='N') + if(code[i+2]=='K'){ + *phead = INK; + phead++; + i+=2; + } + break; + case 'D': + if(code[i+1]=='E') + if(code[i+2]=='K'){ + *phead = DEK; + phead++; + i+=2; + } + break; + case 'B': + if(code[i+1]=='R') + if(code[i+2]=='E') + if(code[i+3] =='K'){ + *phead = BREK; + phead++; + i+=3; + } + break; + case 'G': + if(code[i+1]=='L') + if(code[i+2]=='E') + if(code[i+3] =='K'){ + *phead = GLEK; + phead++; + i+=3; + } + break; + case 'P': + if(code[i+1]=='U') + if(code[i+2]=='K'){ + *phead = PUK; + phead++; + i+=2; + } + break; + case 'K': + if(code[i+1]=='U') + if(code[i+2]=='K'){ + *phead = KUK; + phead++; + i+=2; + } + break; + case 'F': + if(code[i+1]=='U') + if(code[i+2]=='K'){ + *phead = FUK; + phead++; + i+=2; + } + break; + case ']': + for(size_t k=0;k 0){//aby J nepreslo von. + current_char = code[++j];// + if (current_char==0){ + break; + } + if (current_char == ']'){ + loop--; + } else if (current_char == '['){ + loop++; + } + } + if(loop==0){ + *phead = LP; + loops[0][loopscount] = phead; + validRP[loopscount++] = j; + phead++; + } + break; } - } } + phead = ptape; + for (i = 0; i<30000; i++){ + if(running){ + switch(*phead){ + case INK: + //printf("Ink..%c",*dhead); + (*dhead)++; + //printf("->%c\n",*dhead); + break; + case DEK: + //printf("Dek..%c",*dhead); + (*dhead)--; + //printf("->%c\n",*dhead); + break; + case BREK: + dhead++; + break; + case GLEK: + dhead--; + break; + case PUK: + //printf("Puk\n"); + putchar(*dhead); + //printf("\nPukEnd\n"); + break; + case KUK: + printf("Zadaj vstup:\n"); + *dhead=getchar(); + while(getchar()!='\n'){} + //printf("Kukol %c\n",*dhead); + break; + case FUK: + running=false; + break; + case LP: + if(*dhead==0){ + for(int j=0;j