usaa20/sk4/program.c
2021-01-09 00:44:49 +01:00

185 lines
5.9 KiB
C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
typedef enum {
INK, DEK,
BREK, GLEK,
PUK, KUK,
LP, RP,
TUK, FUK
}inst;
char dtape[30000] = {0};//hlava dh
inst ptape[30000] = {0};//hlava ph
size_t loops[2][15000] = {{0},{0}};
size_t loopscount=0;
char* dhead = dtape;
inst* phead = ptape;
void run_tukafuk(const char* code) {//
char current_char;
bool running = false;
size_t i;
//bolo pozadovane zistit, kdd su skoky a teda som ich ulozil
//(tie adresy skokov)
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<loopscount;k++){
if(loops[1][k]==i){
*phead = RP;
phead++;
}
}
break;
case '[':
j = i;
loop = 1;
while (loop > 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;
phead++;
loops[0][loopscount] = i;
loops[1][loopscount++] = j;
}
break;
}
/*if (current_char == 'INK') {//>
++ptr;
} else if (current_char == 'DEK') {//<
--ptr;
} else if (current_char == 'BREK') {// +
++*ptr;
} else if (current_char == 'GLEK') {// -
--*ptr;
} else if (current_char == 'PUK' ) {// .
putchar(*ptr);
} else if (current_char == 'KUK') {// ,
*ptr = getchar();
} else if (current_char == '[') {//start loop
continue;
} else if (current_char == ']' && *ptr) {stop loop
loop = 1;
while (loop > 0) {
current_char = input[--i];
if (current_char == '[') {
loop--;
} else if (current_char == ']') {
loop++;
}
*/
}
}
int main() {
run_tukafuk("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 INK INK INK KUK DEK DEK KUK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK KUK KUK 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 DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK DEK KUK FUK ");// (",[.[-],]")
printf("Programova Paska: \n");
for(inst *ptr=ptape;ptr<phead;ptr++){
switch (*ptr){
case TUK:printf("TUK ");
break;
case INK:printf("INK ");
break;
case DEK:printf("DEK ");
break;
case BREK:printf("BREK ");
break;
case GLEK:printf("GLEK ");
break;
case PUK:printf("PUK ");
break;
case KUK:printf("KUK ");
break;
case FUK:printf("FUK ");
break;
case LP:printf("LP ");
break;
case RP:printf("RP ");
break;
default:printf("NULL ");
break;
}
}
printf("\n");
return 0;
}