A Forth programozási nyelv

Alprogramok

Alprogramok

A szótárról

A FORTH a számára értelmezhető szavakat a szótárban tárolja. Lehetőséget nyújt új szótári szavak létrehozására, ezzel tulajdonképpen a FORTH-nyelvet bővítjük saját szavakkal. Tulajdonképpen a FORTH nagy része maga is FORTH-ban íródott.
Új szó definiálása " : "- al történhet.
Pl: : KIIR 42 EMIT ;

Ezzel defináltuk a KIIR új szót, amelyet innentől kezdve bármikor használhatunk, funkciója a 42-es kódú karakter kiirása a képernyőre. A FORTH szavak tulajdonképpen eljárásokként tekinthetők, a paraméterátadás pedig a vermen keresztül történikAz EMIT utasítás funkciója, hogy kiírja a verem tetején lévő számnak megfelelő karaktert.
Fontos: a szavak között kell egy SPACE-nek szerepelni, ezzel jelezzük a fordítónak, hogy az egy különálló szó, szódefiníciót ";"-vel zárunk. A ":" és a ";" maga is egy szó, tehát SPACE -ekkel kell őket is választani a többitől.

A szótár minden elemének van egy láncmezője, ez fűzi öszze a szótár szavait. A láncmező egy mutatót tartalmaz az
előző szó névmezőjére, vagy ( a szótár "legalsó" eleménél) 0-t .Tudunk tehát a láncon haladni; még egy szó
amellyel megtaláljuk a lánc elejét:
LATEST ( ---- ncím )
Az utoljára definiált szótári szónévmezőjének címét adja.
Kereső és láncoló szótár
Zavarba hozó, hogy két olyan szó jelentése között kell különbséget tenni, amelyeket
egyformán "szótár"-nak fordítunk. Az egyik a dictionary szó, amely "fizikai" szótárat jelent, a másik a vocabulary,
amely "logikai" szótár, szavak mutatókkal összeláncolt sorozata. A Forth-ban egy fizikai szótár több "logikait"
tartalmazhat; a FORTH szótáron kívül többnyire van EDITOR és ASSEMBLER szótár is. Alapesetben a FORTH szótárban vagyunk;
ekkor pl. az EDITOR szótár szavait az interpreter egyszerűen nem találja meg, nem ismeri fel. Ahhoz, hogy az EDITOR szótár
szavait használhassuk, az EDITOR-t kell kereső szótárrá tenni. ( A "kereső szótár" meglehetősen szabad fordítása az eredeti
"context vocabulary", kontext szótár kifejezésnek.) A szótárak közül egy adott pillanatban egyetlen lehet
kereső szótár.
Az interpreter az interpretálandó szavakat a kereső (context) szótárban keresi. Egy szótár neve az adott
szótárat teszi kereső szótárrá.
Tehát pl. az EDITOR parancssorral "láthatóvá tettük" az EDITOR szótár szavait.
Minden szótár szavaihoz hózzá vannak láncolva annak a szótárnak a szavai, amelyben az adott szótárat definiálták.
Végső soron ez azt jelenti, hogy
a FORTH szótár szavai minden kereső szótárból látszanak.
Az újonnan definiált szavak a láncoló szótárba kerülnek.
A szótár nevével csak a kereső szótárat változtatjuk meg;ha azt kívánjuk, hogy a láncoló szótár is ugyanaz legyen, akkor a DEFINITIONS szót kell használnunk,
amely hozzáigazítja a láncoló szótárat
a keresőhöz, a kettő meg fog egyezni.
Fordított irányban igazítja össze a két szótárat a definíciókat bevezető : szó:
ez a keresőt állítja át úgy, hogy megegyezzen a láncolóval.
A FORGET csak akkor működik, ha a kereső és a láncoló szótár
megegyezik, egyébként hibajelzéssel megszakad.

Paraméterátadás-lokális változók

Definiálhatunk lokális változókat is egy új szó esetén:
: SWAP { a b -- b a }
b a ;
1 2 SWAP .S 2DROP
Ebben a példában { a b -- b a } a lokális definíció: a verem két legfelső eleme. Ezzel a lehetőséggel a definíció lényeges részének
megírásával kell csak foglalkoznunk, anélkül, hogy a verem műveletek túl sok gondot okoznának.