## Zadanie Virtuálny stroj programovacieho jazyka TUKAFUK sa skladá z dvoch pások. Na jednej páske je napísaný program. Po programovej páske beží programová hlava PH a číta inštrukcie zľava doprava. Stroj má k dispozícii aj dátovú pásku s osobitnou hlavou DH. Príklad počiatočného stavu virtuálneho stroja TUKAFUK: ``` PH | v +-----+-----+-----+-----+ Program | TUK | INK | DEK | FUK | +-----+-----+-----+-----+ DH | v +---+---+---+---+ Data | 0 | 0 | 0 | 0 | +---+---+---+---+ ``` Skladá sa z nasledujúcich symbolov: ``` TUK začiatok programu INK inkrementuj údaj na mieste kde ukazuje DH DEK dekrementuj údaj na mieste kde ukazuje DH BREK posuň hlavu DH do prava o jedno miesto GLEK posuň hlavu DH do ľava o jedno miesto PUK vypíš 1 byte z miesta kde ukazuje hlava DH KUK načítaj 1 byte na miesto je ukazuje hlava DH [ ak je hlava DH nula, posuň PH na zodpovedajúcu značku ]. Inak pokračj ďalej. ] ak hlava nie je nula, pokračuj s PH na zodpovedajúvej značke [. Inak pokračuj ďalej. FUK koniec programu iný znak: odeľuje príkazy alebo slúži ako komentár. ``` Vytvorte interpret jazyka TUKAFUK. Program by mal implementovať funkciu: ```C void run_tukafuk(const char* code); ``` Funkcia preloží vstupný program (zistí adresy skokov) a spustí ho. Preklad programu znamená identifikáciu inštrukcií a zistenie adries pre skok programovej hlavy PH. Pri implementácii zistenia adries PH v programe pre inštrukcie [ a ]. Funkcie getchar() a putchar() použite pre implementáciu inštrukcií PUK a KUK . Pre implementáciu dátovej pásky použite pole znakov, pre implementáciu programovej pásky použite pole spracovaných inštrukcií. Vytvorte program v jazyku TUKAFUK na výpis celého Vášho mena. ## Stručný opis funkčnosti Musíme navrhnúť jednoduchý programovací jazyk podobný brainfucku. Načíta zdrojový súbor s príkazmi a potom vykoná rôzne operácie s poľom údajov na základe príkazov, ktoré prečítal ## Stručný opis riešenia Program číta vstupy slovo po slove (oddelené medzerou) a ak je načítaná slová jednou z funkcií, potom sa zapíše do špeciálneho poľa, ktoré tieto funkcie ukladá. Potom sa operácia zavolá na pole s funkciami, ktoré potom spustí samotnú akciu funkcie. ## Podmienky za ktorých funguje Existuje neidentifikovaný dôvod, prečo program nikdy neopustí slučku hľadajúcu TUK, ak prvý riadok súboru nie je príkaz TUK alebo prázdny riadok ## Používateľská príručka Zostavte pomocou: ``` make ``` Spustiť pomocou ``` ./program source_file ```