A FALSE programozási nyelv

Típusok, típuskonstrukciók

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.