Mini Forth İnterpretatoru
Forth, məlumatların idarə edilməsi üçün LIFO (Stack) məntiqinə əsaslanan proqramlaşdırma dilidir. Sizin vəzifəniz Forth dilinin sadələşdirilmiş bir versiyası üçün interpretator yazmaqdır.
Yazacağınız interpretator aşağıdakı əməliyyatları dəstəkləməlidir:
Riyazi əməliyyatlar:
+(toplama),-(çıxma),*(vurma),/(tam ədədli bölmə).Yığın (Stack) Manipulyasiyaları
Operation
Effect
Example
DUP
Yığının ən üstündəki elementi kopyalayır.
5 8 DUP→5 8 8DROP
Yığının ən üstündəki elementi silir.
5 8 DROP→5SWAP
Yığının ən üstündəki iki elementin yerini dəyişdirir.
5 8 SWAP→8 5OVER
Yığının üstündən ikinci elementi kopyalayır və ən üstə əlavə edir.
5 8 OVER→5 8 5Yeni Sözlərin (Funksiyaların) Yaradılması İstifadəçi
:(iki nöqtə) və;(nöqtəli vergül) simvollarından istifadə edərək bir neçə əməliyyatı tək bir "söz" altında birləşdirə bilər.Sintaksis:
: yeni-soz emeliyyatlar ;Nümunə:
: kvadrat DUP * ;komandasıkvadratadlı yeni əməliyyat yaradır. Bundan sonra proqramda5 kvadratyazıldıqda, interpretator bunu5 DUP *kimi başa düşəcək və yığına25əlavə edəcək.Qeyd: Yeni yaradılan sözlər əvvəlcədən mövcud olan sözlərin (hətta
+və yaDUPkimi standart komandaların da) üzərinə yazıla bilər, lakin rəqəmləri yenidən təyin etmək qadağandır.
Vacib Qaydalar və Xətalar (Error Handling): Proqramınız icra zamanı hər hansı xəta ilə qarşılaşarsa, dərhal dayanmalı və yalnızca müvafiq xəta mesajını çap etməlidir:
Əgər yığına ən azı 1 element lazım olan əməliyyat çağırılıbsa və yığın boşdursa:
empty stackƏgər yığına ən azı 2 element lazım olan əməliyyat (
+,-,*,/,SWAP,OVER) çağırılıbsa, lakin yığında yalnız 1 element varsa:only one value on the stackSıfıra bölmə cəhdi olarsa:
divide by zeroMövcud olmayan (tanınmayan) bir söz icra edilməyə çalışılarsa:
undefined operationİstifadəçi rəqəmləri (məsələn, 1, 2, -5) yeni söz kimi təyin etməyə çalışarsa (məsələn,
: 1 2 ;):illegal operationDil böyük/kiçik hərflərə həssas deyil (Case-insensitive).
Giriş verilənləri:
Birinci sətirdə komandaların sətir sayını bildirən N tam ədədi verilir. Növbəti N sətirdə Forth komandaları verilir.
Çıxış verilənləri:
Bütün komandalar uğurla icra edilərsə, yığının (stack) yekun vəziyyətini aşağıdan yuxarıya doğru aralarında bir boşluq olmaqla çap edin. Xəta olarsa, yalnız xəta mesajını çap edin.