Típusszerkezet
A nyelv két típust támogat : egészeket és karaktereket.
Elemi típusok
Egészek
Az egészek bevitele a szokásos módon történik: "egész"
Karakterek
A karakterek beírásakor egy aposztrófot kell írni a karakter elé (nem keverendő össze a ` karakterrel)
'A (ASCII 65-ös karakter)
Típuskonstrukciók
A nyelv nem támogatja a saját típusok létrehiozásást csak a két beépített típus használható.
Típuskonverziók
A nyelv nem támogatja a típuskonverziót.
Változók, konstansok
Változókból kevesebb kell mint más programozási nyelvekben, hiszen ez a nyelv főleg a vermen végez műveleteket. A nyelv megalkotásánál főleg a működés volt a fő szempont nem pedig a könnyen értelmezhető kód. A változók az angol ábécé kisbetűi lehetnek és csak ezek. "a".."z" A ":" a kijelölést végzi, míg a ";" épp ennek az ellenkezője. Így lehet kijelölni egy változót és értéket adni neki. Minden változó értéke (és verem elem) csak 32 bites lehet.
1a: { a:=1 } a;1+b: { b:=a+1 }
A nyelvben nem lehet konstansokat létrehozni.
Kifejezések, operátorok
Kifejezések
A nyelv örökölte a kiértékelés menetét a Forth nyelvtől. Az összes nyelvi elem a veremműveleteket definiál. Egy egyszerű példa: A sima számok bekerülnek a verembe. A "+" operátor a verem tetején levő két elemet veszi ki, majd adja össze és a végeredményt a verem tetejére rakja vissza. Így könnyen kiértékelhető a következő lengyel formára hozott művelet:
1 2 + 4 *
Az eredeti kifejezése:
(1+2)*4 = 12
Komplex kifejezéseknél sok részeredményt tehetünk a verembe, ezért nem kell használni változókat. A nyelvben nincsenek függvények és metóduso sokkal inkább egy adatfolyam, mely szinbólumokból áll. Ezek a szinbólumok a verem állapotát módosítják.
Operátorok
"+" "-" "*" "/" "_"
Összeadás, kivonás, szorzás, osztás, negálás.
"=" ">"
Az összehasonlító műveletek visszatérési értéke 0 (hamis) vagy -1 (igaz).
"~"
Ezzel a művelettel tudunk egy kiértékelés végeredményét eltárolni és beszúrni a kiértékelés adott helyére. Ehhez a funkcióhoz a "~" előtt egy operátornak kell állni.
a;1_=~ { a<>-1 }
"&" "|" "~"
Logikai és, vagy, nem.
a;0>a;99>~& { (a>0) and (a<100) }
Veremműveletek
"$" | (x-x,x) | dup: | a verem legfelső elemét duplikálja |
"%" | (x-) | drop: | törli a verem tetején lévő elemet |
"\" | (x1,x2-x2,x1) | swap: | swapola a verem tetején lévő elemet |
"@" | (x,x1,x2-x1,x2,x) | rot: | a verem 3. elemét forgatja a verem tetejére |
"ř" | (n-x) | pick: | az n. elemet másolja a verem tetejére |
Input/Output műveletek
Ezek a műveletek a bufferen vannak végrehajtva!
* Stringek A stringek automatikusan kiíródnak. Speciálisan a stringeket a FALASE nyelvben <> jelek közé kéne tenni, ezt magyarázza a hello word programban, miért van a ,második " jel új sorban.
"Hello, World!
"
* Egészek "." a ponttal lehet megmondani, hogy a verem legfelső eleme egy egész és ezt akarjuk kiíratni.
123.
Jelentése: kiírja a konzolra a "123" számot.
* Karakterek "," a vesszővel lehet megadni, hogy a verem tetején lévő szám egy karakter ascii kódját takarja.
65,
Jelentése: kiírja a konzolra az "A" betűt.
* Karakter beolvasása a bemenetről "^" karakter segítségével történik.
^
Jelentése: beolvas egy karaktert a verem tetejére.
* Verem kiírása "ß" A verem tartalmát írja ki az aktuális kimenetre. Amikor a bemenet és a kimenet is különbözik (például egy állomány tartalmát akarjunk lemásolni egy másik állományba), és közben karaktereket akarunk beolvasni más helyről, akkor jól jön a verem kiürítése.
ß[^$1_=~][,]# { while c:=getc()<>EOF do putc(c) }
A példa bemutatja, hogy hogyan tudunk egy állományt átmásolni, ekkor nem kell használnunk a verem kiürítését, de ha valamilyen megerősítést akarunk kérni a felhasználótól, akkor a konzolról kell adatot bekérnünk, ekkor viszont az eddigi tartalmat üríteni kell.