a
This commit is contained in:
parent
c3052015df
commit
9ba1c81d18
166
sk4/program.c
166
sk4/program.c
@ -1,26 +1,133 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
unsigned char tape[30000] = {0};
|
|
||||||
unsigned char* ptr = tape;
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
INK, DEK,
|
INK, DEK,
|
||||||
BREK, GLEK,
|
BREK, GLEK,
|
||||||
BF_NEXT, BF_PREV,
|
PUK, KUK,
|
||||||
BF_LOOP_START, BF_LOOP_END,
|
LP, RP,
|
||||||
} brainfuck_instruction_t;
|
TUK, FUK
|
||||||
|
}inst;
|
||||||
|
|
||||||
void interpret(char* input) {
|
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;
|
char current_char;
|
||||||
|
bool running = false;
|
||||||
size_t i;
|
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;
|
size_t loop;
|
||||||
for (i = 0; input[i] != 0; i++) {
|
switch(current_char){
|
||||||
current_char = input[i];
|
case 'T':
|
||||||
if (current_char == 'INK') {// >
|
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;
|
++ptr;
|
||||||
} else if (current_char == 'DEK') {// <
|
} else if (current_char == 'DEK') {//<
|
||||||
--ptr;
|
--ptr;
|
||||||
} else if (current_char == 'BREK') {// +
|
} else if (current_char == 'BREK') {// +
|
||||||
++*ptr;
|
++*ptr;
|
||||||
@ -32,7 +139,7 @@ void interpret(char* input) {
|
|||||||
*ptr = getchar();
|
*ptr = getchar();
|
||||||
} else if (current_char == '[') {//start loop
|
} else if (current_char == '[') {//start loop
|
||||||
continue;
|
continue;
|
||||||
} else if (current_char == ']' && *ptr) {//stop loop
|
} else if (current_char == ']' && *ptr) {stop loop
|
||||||
loop = 1;
|
loop = 1;
|
||||||
while (loop > 0) {
|
while (loop > 0) {
|
||||||
current_char = input[--i];
|
current_char = input[--i];
|
||||||
@ -41,13 +148,38 @@ void interpret(char* input) {
|
|||||||
} else if (current_char == ']') {
|
} else if (current_char == ']') {
|
||||||
loop++;
|
loop++;
|
||||||
}
|
}
|
||||||
}
|
*/
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
interpret("INK DEK BREK GLEK PUK KUK []");// (",[.[-],]")
|
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;
|
return 0;
|
||||||
}
|
}
|
BIN
sk4/program.exe
BIN
sk4/program.exe
Binary file not shown.
Loading…
Reference in New Issue
Block a user