45 lines
2.6 KiB
Markdown
45 lines
2.6 KiB
Markdown
á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.
|
|
|
|
Opis Funkčnosti :
|
|
Program načíta textový súbor do ktorého budú vložené jednotlivé inštrukcie začínajúci inštrukciou TUK a končiaci inštrukciou FUK. Teda program číta údaje z pásky ktoré sa ukladajú do globálnych premenných pričom tiež kontroluje, či je inštrukcia správne napísaná (namiesto INK INC, atd)a taktiež sa hneď posúva hlava, ktorá teda ide čítať ďalšiu inštrukciu
|
|
Po načítani nasleduje samotný preklad ktorý je vykonávaný za pomoci smerníkov a ascii tabuľky
|
|
Program bude fungovať ak :
|
|
1.Budú inštrukcie zadané do textového súboru kod.txt
|
|
2.Inštrukcie budú zapísané práve tak, že prvá inštrukcia bude TUK a posledná FUK
|
|
3.A po určitom počte ink/dek inśtrukcií bude následovať výpis za pomoci funkcie PUK
|