A TOM három alapvető fajta
lehetőséget biztosít a kommentezésre.
/* C típusú komment */ a két jel között tart
// C++ típusú komment, sor végéig tart
<doc> Dokumentációs komment </doc> a két jel között tart
Az egész számoknak int a típusa, ha elfér az int tartományában, különben long. Ha ebbe se fér bele, akkor hibaüzenetet küld a fordító. A konstans elé írt l vagy L betűvel kényszeríthetjük arra, hogy long típusú legyen a konstans. A 0-val kezdődő konstansokat oktálisnak tekinti, ill. a 0x-el kezdődőeket, pedig hexadecimálisnak. A hexadecimális számjegyek nem nagybetű-érzékenyek. A karakterek ’ jel között byte-tá konvertálódnak (az ASCII- kódjuk alapján).
A tizedespontot tartalmazó számok
float
típusúak, amennyiben elférnek benne. Ha nem, akkor
double,
ha ebbe sem fér el, akkor hibaüzenetet ad a
fordító. A konstans után írt „d”
betűvel kényszeríthetjük a fordítót,
hogy double
típusú legyen a szám.
A TOM nyelvben 1, 2 ill. 3 operandusú operátorok vannak. Az operátoroknak természetesen van prioritásuk. Szintaktikájuk nagyon hasonlít a C nyelvéhez. Amiben eltér tőle; az -> implikáció operátor és a >>> logikai jobbra-tolás operátor. Lusta kiértékelést végez a nyelv, tehát ha egy logikai kifejezés elejéből már meg tudja állapítani a kifejezés egészének értékét, akkor nem értékeli ki végig azt.
Az operátorok jelentése és prioritása az alábbi táblázat mutatja be (a legmagasabb prioritásúaktól haladva a kisebbig):
Operátor |
Aritás |
Asszociativitás |
Leírás |
++, -- |
1 |
jobboldali |
Növelés, csökkentés |
-, ~, ! |
1 |
jobboldali |
Negálások |
*, /, % |
2 |
baloldali |
Szorzás, osztás, moduló |
+, - |
2 |
Baloldali |
összeadás, kivonás |
<<, >> |
2 |
Baloldali |
Aritmetikai eltolás |
>>> |
2 |
Baloldali |
Logikai jobbra tolás |
& |
2 |
Baloldali |
Bitenkénti és |
| |
2 |
Baloldali |
Bitenkénti vagy |
^ |
2 |
Baloldali |
Bitenkénti kizáró vagy |
<, <=, >=, > |
2 |
Baloldali |
Rendező összehasonlítás |
==, != |
2 |
Baloldali |
Egyenlőség ellenőrzés |
&& |
2 |
Baloldali |
Logikai és |
|| |
2 |
Baloldali |
Logikai vagy |
-> |
2 |
Baloldali |
Implikáció |
? : |
3 |
Jobboldali |
If-then-else |
=, stb. |
2 |
Jobboldali |
értékadás |
Minden változónak van típusa és használatuk előtt deklarálni kell. Helyi változók meghatározhatók bárhol egy összetett kifejezésben. A változó hatásköre a deklarációjával kezdődik és a tartalmazó rész végével fejeződik be.
Ha a expression
adott, az
definiálja
a változó kezdőértékét,
az identifier
alapján nevezve el azt,
meghatározva a local_var
által.
Ha ez nem történt meg, a
változó a típusának alapértelmezett
értékét veszi fel. Pl:
A ciklusok formája teljesen megegyezik a C
nyelvével.
Van elöl tesztelős ciklus, amely formája a következő:
while
(feltétel) utasítás
Erre egy példa:
Hátul tesztelős ciklus:
do
utasítás while
(feltétel)
A for ciklus felépítése a szokásos, a C-ben
megismert módhoz hasonló:
for
(kezdeti érték; feltétel; növelés)
Break
és continue
használható.A következő példa szemlélteti
az if-else
konstrukció használatát.
Ha ez a program argumentumok nélkül
kerül meghívásra, az Array argv
üres lesz, és 0
-t ad vissza a
hosszának. így a program válasza no
arguments
lesz. Ha legalább egy argumentummal
hívjuk meg, az argv
-ben lévő elemek
számát adja válaszként.
Csak egy 3 operandusú operátor van a
TOM nyelvben, ? :
,
amit az if-then-else
operátorként is számontartanak. Pl. a >
b ? a : b
esetén ha a
nagyobb,
mint b
, akkor a
kifejezés a
-t
adja vissza eredményként,
egyébként b
-t.
Egy x ? y : z
kifejezés esetén x
-nek boolean-nak kell
lennie,
valamint y
és z
típusának
meg kell egyeznie.
y
és z
közül csak
az
egyik fog
kiértékelődni.
Minden
típus pontosan megfelel saját magának;
szűk integer típusok megfelelnek a bővebb integer
típusoknak; egy alosztály
passzol bármelyik ősosztályával; és egy
tuple illeszkedik egy másik tuple-ra ha
az elemeik száma megegyezik és a tartalmazott elemek
megfelelnek.
Explicit konverzió két okból létezik: hogy lehetővé tegye az implicit konverziók explicitté tételét és hogy implicit módon nem kivitelezhető konverziókat megvalósíthatóvá tegyen.
Engedélyezett explicit konverzió valamennyi konverzió, ami
ByteString
–ről selector
–ra
ha a ByteString
típusú kifejezés egy string konstans.