usaa20/sk1
2021-01-17 18:11:04 +00:00
..
Makefile Update 'sk1/Makefile' 2021-01-17 17:21:55 +00:00
program.c Update 'sk1/program.c' 2021-01-17 18:09:37 +00:00
README.md Update 'sk1/README.md' 2021-01-17 18:11:04 +00:00

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:

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