74 lines
2.7 KiB
Markdown
74 lines
2.7 KiB
Markdown
|
## 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
|
||
|
```
|