Forth

Forth

Nehéz

Utasítások

Készíts egy értelmezőt a Forth egy nagyon egyszerű részhalmazához.

A Forth egy veremalapú programozási nyelv. Készíts egy nagyon egyszerű értelmezőt a Forth egy kis részhalmazához.

Az értelmeződnek a következő szavakat kell támogatnia:

  • +, -, *, / (egész számokkal végzett műveletek)
  • DUP, DROP, SWAP, OVER (veremműveletek)

Az értelmeződnek emellett támogatnia kell új szavak definiálását a szokásos szintaxissal: : word-name definition ;.

Hogy a dolog egyszerű maradjon, az egyetlen adattípus, amelyet támogatnod kell, az előjeles egész szám, méghozzá legalább 16 bites.

A szintaxishoz a következő szabályokat használd: egy szám egy vagy több (ASCII-)számjegyből álló sorozat, egy szó pedig egy vagy több olyan betűből, számjegyből, szimbólumból vagy írásjelből álló sorozat, amely nem szám. (A Forth valószínűleg kicsit más szabályokat használ, de ez így elég jó közelítés.)

A szavak nem tesznek különbséget kis- és nagybetű között.

Megvalósítás

A Forthban a függvényeket words-nak hívják, és egy adatvermen működnek. Minden szó a veremről veszi a paramétereit, és az eredményeit a veremre teszi vissza.

A Forth dokumentációja mindig megadja az adatverem állapotát a szó végrehajtása előtt és után, mégpedig a következő módon: ( p1 p2 ... pN --- r1 r2 ... rN ). A p1-től pN-ig terjedő értékek a szó paramétereit jelentik a veremben a hívás előtt (a veremben feljebb lehetnek további adatok is, amelyek itt nincsenek feltüntetve), az r1-től rN-ig terjedő értékek pedig a szó visszatérési értékeit a veremben a hívás után. A --- elválasztó különbözteti meg a verem állapotát a szó végrehajtása előtt és után.

A megvalósítandó szavak definíciója a következő:

  • A ToS a verem tetejét jelenti (Top of Stack)
  • A verem tetejét a jobb szélső érték jelöli
szó verem állapota leírás
+ ( a b --- sum ) sum = a + b
- ( a b --- diff ) diff = a - b
* ( a b --- prod ) prod = a * b
/ ( a b --- quot ) quot = a / b
dup ( a --- a a ) a ToS-en lévő érték duplikálása
drop ( a --- ) a ToS-en lévő érték eldobása
swap ( a b --- b a ) a ToS-en lévő két érték felcserélése
over ( a b c --- a b c b ) a 2. érték átmásolása a ToS-re

Ha szeretnél játszani egy online Forth-értelmezővel, vagy többet megtudni a megvalósítandó szavakról, próbáld ki az Easy Forth oldalt (konkrétan az Adding Some Numbers, Defining Words és Stack Manipulation szakaszt).

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Odin Exercism

Készen állsz elkezdeni a(z) Forth feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Odin nyelvet 73 feladat segítségével, valódi emberi mentorálással, mindez ingyen.