A Mercury programozási nyelv

Tokenek

Mercury-ban a tokenek gyakorlatilag ugyanazok, mint az ISO Prolog-ban, csupán kettő esetén van különbség: a # sor token esetében, ami sorszám direktívaként használatos, valamint a fordított idézőjel (`, backquote) token esetében.

A következőkben szerepelnek a különböző tokenek, melyek whitespace-ekkel vagy sorszám direktívákkal választhatóak el egymástól.


sorszám direktíva
Egy sorszám direktíva egy #karakterből, egy pozitív egész számból (mely a sor számát határozza meg), valamint egy újsor karakterből áll. Egy #sor direktíva egyetlen szerepe, hogy pontosabban maghatározza egy adott sor számát, egyébként minden más esetben figyelmen kívül van hagyja a fordító. Egy sorszámdirektíva bárhol előfordulhat, ahol egy token állhat. A direktíva a pragma source_file deklarációval együtt használatos annak jelzésére, hogy az ezután található Mercury kódot egy másik eszköz generálta; arra szolgálnak, hogy a Mercury kód minden egyes sorát összekapcsoljuk az erediti forrással, és az eredeti forrás egy sorával, melyből az adott Mercury kód származik. így a Mercury fordító képes informatívabb hibaüzeneteket adni az eredeti forráskód felhasználásával. Egy #sor direktíva a közvetlenül utána álló sor sorszámát határozza meg. Az ez után álló sorok sorszáma a szokásos módon növekszik, azaz például egy #100 direktíva után álló második sor sorszáma 101 lesz.
sztring
Egy sztring karakterek sorozata dupla idézőjelek (", double quotes) között. Egy adott sztringen belül két szomszédos dupla idézőjel egyetlen dupla idézőjelet jelent, pédául a """" sztring hossza egy, és egyetlen dupla idézőjelet tartalmaz: a külső dupla idézőjelpár a sztring határolójelei, és a belső idézőjelpár jelöli az egyetlen dupla idézőjelet. Sztringek tartalmazhatnak escape-szekvenciákat is: a \a jelenti a "risztás" (sípoló) karaktert, \b a backspace-t, \r a kocsi-vissza karaktert, \f a lapdobást, \t a tabot, \n az újsor karaktert, \v a vertikális tabot. Egy \ után lévő visszaper, idézőjel és duplaidézőjel magát az adott karaktert jelenti. A \x karaktersorozat hexadecimális escape-karaktert vezet be; ezt hexadecimális számjegyek sorozatának és egy lezáró visszaperjelnek kell követnie. Ez helyettesítésre kerül azzal a karakterrel, melynek a karakter-kódja a hexadecimális számban azonosításra került. Hasonlóan, a visszaperjel után álló oktális számjegy egy oktális escape-karaktert vezet be; hasonlóan a hexadecimális esethez, az oktális számjegyek sorozatát egy lezáró visszaperjellel kell befejezni. Egy olyan visszaperjel karakter, amelyet azonnal egy újsor karakter követ, törlésre kerül; így ez a két karakter használható arra, hogy folytassunk egy sztringet több mint egy forrás-soron keresztül. (A sztring literálok szintén tartalmazhatnak beágyazott újsor karaktereket.)
név
Egy név szerepelhet idézőjelek között és idézőjelek nélkül is. Az idézőjel nélküli nevek kisbetűvel kezdődnek, amit követhetnek betűk, számjegyek és aláhúzásjel. Az idézőjelek közötti nevek tetszőleges hosszú tetszőleges karakterek sorozata idézőjelek (') között. Idézőjeles nevekben két szomszédos idézőjel egyetlen idézőjelet jelöl. Az idézőjeles nevek szintén tartalmazhatnak escape-karaktereket, a sztringekkel megegyező módon.
változó
Egy változó egy nagybetű vagy aláhúzásjel ( _ ), melyet további betűk, aláhúzásjelek vagy számjegyek követhetnek. Az egyetlen aláhúzásjelből álló változó kezelése speciális: minden _ példány különböző változót jelent. Ráadásul az aláhúzásjellel kezdődő változókról feltételezzük, hogy "lényegtelen" változók; a Mercury fordító figyelmeztet, ha olyan változót talál, ami csupán egyszer szerepel és nem aláhúzásjellel kezdődik, vagy ha egy aláhúzásjellel kezdő változó többször is előfordul egy érvényességi tartományon belül.
egész
Egy egész egy decimális, egy bináris, egy oktális, egy hexadecimális vagy egy karakter-kód literál. Egy decimális literál decimális számjegyek tetszőleges sorozata. Egy bináris literál kezdete 0b, melyet bináris számjegyek tetszőleges sorozata követ. Egy oktális literál 0o-val kezdődő, tetszőleges oktális számjegyeket tartalmazó kifejezés. A hexadecimális literálok 0x-val kezdődnek és tetszőleges hexadecimális számjegyek sorozatából állnak. A karakter-kód literál egy 0', melyet egyetlen tetszőleges karakter követ.
lebegőpontos
Egy lebegőpontos literál decimális számjegyek tetszőleges sorozatából, egy decimális pontból és egy tetszőleges számjegysorozatból (a törtrészből), végül egy E betűből és egy másik tetszőleges számjegysorozatból (az exponensből) áll. A törtrész vagy az exponens elhagyható (egyszerre mindkettő nem).
open_ct
Bal gömbölyű zárójel, (, amit nem előzhetnek meg whitespace-ek.
open
Bal gömbölyű zárójel, (, amit megelőzhetnek whitespace-ek.
close
Egy jobb gömbölyű zárójel, ).
open_list
Egy bal szögletes zárójel, [.
close_list
Egy jobb szögletes zárójel, ].
open_curly
Egy bal kapcsos zárójel, {.
close_curly
Egy jobb kapcsos zárójel, }.
ht_sep
Fej-vég szeparátor ("head-tail separator"), jele a | karakter.
comma
vessző, ,.
end
szakaszvég (pont), ..
eof
fájl vége.