A MUMPS programozási nyelv

Típusok, típuskonstrukciók

A MUMPS nyelvben minden adat logikailag egy változó hosszúságú ASCII karakterlánc. Ha az adat felhasználás alatt van, akkor abban a formátumban értelmeződik a karakterlánc, ahogy azt a környezet igényli. Ha aritmetikai műveletet végzünk, akkor számként (egész, vagy lebegőpontos számként), ha logikai műveletet végzünk, akkor igaz, vagy hamis értékként (valójában ebben az esetben is számként lesz értelmezve: igaz-1, hamis-0), és ha karakteres műveletet végzünk, akkor ASCII karakterláncként lesz értelmezve a változó.

Számok

A számokat egészként, vagy lebegőpontos számként lehet reprezentálni. Az egész számok numerikus karakterekből állnak, amelyeket megelőzhet egy mínusz (-) karakter. Legalább egy numerikus karakternek kell szerepelnie a változóban. A lebegőpontos számok hasonlóak az egész számokhoz, azzal a különbséggel, hogy van törtrészük, amit egy pont (.) karakter választ el. A lebegőpontos számoknál meg lehet adni egy exponenciális részt is egy 'E' karakter után.

200 -24 12.34 -12.2343 980.0021E6 120.5501E-10 -.67

Karakterláncok

A karakterláncokat idézőjelek (") közé kell tenni. Ha a karakterláncba szeretnénk egy idézőjelet elhelyezni, akkor azt két idézőjellel tehetjük meg.

"Hello vilag!" "120.123" "99+44"

Konstansok

Konstansok olyan numerikus értékek, melyek értékei nem változtathatók meg. Az értékük lehet egész, vagy valós szám is. A konstansokat általában kifejezésekben, vagy feltételeknél használjuk.

Változók

A változók szimbolikus nevek adatokhoz. Két fajta változó létezik: lokális és globális.

Lokális változók

A lokális változók csak egy terminálás erejéig élnek. Értéket a SET, vagy a READ parancsokkal, vagy paraméterátadáskor kaphatnak. Élettartamukat megrövidíteni a KILL paranccsal, vagy egy új változó létrehozásánál, a NEW paranccsal lehet. Miután egy lokális változó létrejött, csak az a felhasználó használhatja, aki létrehozta. A lokális változók neveinek egy százalék (%) karakterrel, vagy egy alfa karakterrel kell, hogy kezdődjenek. Utána alfanumerikus karakterek szerepelhetnek. A változók neveinek hossza tetszőleges lehet, de a fordító csak az első 8 karaktert figyeli.

Globális változók

Globális változók (vagy globálok) olyan változók, amik létrejötte után bármelyik felhasználó számára elérhetők. Létrehozása és nevének lehetőségei teljesen megegyeznek a lokális változóknál leírtakkal, azzal a különbséggel, hogy a nevének mindenképpen a kalap (^) karakterrel kell kezdődnie. A globális változók létrehozásuk után bekerülnek a nyelvet implementáló rendszer adatbázis-rendszerébe.

Speciális változók

A speciális változók feladata információk szolgáltatása a rendszer állapotáról. A speciális változók mindig $ jellel kezdődnek. Az ANSI alap MUMPS speciális változóit az egyes implementációk saját speciális változókkal egészítik ki. Ezek általában Z betűvel kezdődnek.

Tömbök

Minden változót úgy kell elképzelni, mint egy fát. Így ha létre akarunk hozni egy tömböt, akkor nincs semmi teendők, csak a változót (legyen az lokális vagy globális) indexelnünk kell egy változóval. Az indexelés úgy történik, hogy a változó neve után egy zárójelben felsoroljuk az indexelő változókat. Egy egyszerű tömbre történő hivatkozások az alábbiaknak megfelelően nézhetnek ki:

LOKVALT(1) LOKVALT(2) LOKVALT(3) GLOBVALT(1) GLOBVALT(2)

De ennél sokkal bonyolultabb fa-struktúrák is kialakíthatók, ha több indexet használunk, melyek akár karakterláncok, vagy más változók is lehetnek.

STRUK(1,"ALMA",1999) STRUK(1,"KORTE",2000) STRUK(2,"ALMA",1999) ^MASIK(K,STR,^HARMADIK(I,J),".5")

Csupasz hivatkozások

A bonyolult indexelés megkönnyítésére alkották meg a csupasz hivatkozásokat, amiket a globálok indexelésénél lehet alkalmazni. A hivatkozás lényege, hogy az utolsó hivatkozott globálra lehet hivatkozni úgy, hogy nem írunk le semmit, csak a globál utolsó indexét a megfelelő állapotában.
Például a következő két parancssor ekvivalens:

S•^ABC(1,2,3)=5,^(4)=6,^(4,1)="6.1" S•^ABC(1,2,3)=5,^ABC(1,2,4)=6,^(1,2,4,1)="6.1"

Kifejezések

Minden kifejezést a fordító balról jobbra értékel ki. Numerikus kifejezéseknél először minden változó numerikus értékké konvertálódik, csak ezután kezdődik meg a kifejezés kiértékelése. A boolean típusú kifejezéseknél a kifejezés értéke 0, illetve 1 lesz, a kifejezés hamis, illetve igaz mivoltától függően.

Operátorok

Az alábbi táblázatban megtalálható a nyelv összes operátora és annak leírása.

Operátor Név Típus Leírás
+ összeadás bináris Hagyományos összeadás két számon.
& és bináris Logikai és műveletet végez a két operanduson, miután számmá konvertálta őket.
_ összefűzés bináris Két karakterlánc összefűzése.
/ osztás bináris Hagyományos osztás két számon.
= egyenlőség bináris Egyenlőségvizsgálat a két operanduson.
** hatványozás bináris Az első operandust a második operandus hatványára emeli.
nagyobb bináris Nagyobb vizsgálat a két számon.
# hexadecimális unáris Hexadecimális számként értelmezi az operandust.
@ indirekció unáris Indirekten értelmezi az operandust.
\ egész osztás bináris Egész osztást végez a két operanduson.
kevesebb bináris Kevesebb összehasonlítás a két operanduson.
- mínusz unáris Ellenkező előjelűvé konvertálja az operandust.
# maradék bináris Maradékos osztás a két számon.
* szorzás bináris Szorzás a két számon.
' negáció unáris Negáció az operanduson, ami akár operátor is lehet. Ebben az esetben a művelet eredményének inverzét kapjuk.
! vagy bináris Logikai vagy művelet a két operanduson, miután számmá konvertálta őket.
? mintaillesztés bináris A második operandust mintaként illeszti az első operandusra. Mintaillesztésre a következőkben részletesebben kitérünk.
+ plusz unáris Az operandust számként értelmezi.
[ karakterlánc tartalmaz bináris Leteszteli, hogy az első operandus tartalmazza-e a második operandust.
] karakterlánc követi bináris Leteszteli, hogy az első operandus követi-e a második operandust az ASCII kódsorrendben.
- kivonás bináris Hagyományos kivonás két számon.
Mintaillesztő karakterek
Karakter Jelentés
A vagy a Az 52 alfabetikus karakter.
C vagy c A 33 ASCII vezérlő karakter (a 0-31-es és a 127-es ASCII kódú karakterek).
E vagy e Mind a 128 ASCII karakter, plusz a 128 kiterjesztett ASCII karakter.
L vagy l A 26 kisbetűs karakter.
N vagy n A 10 numerikus karakter 0-tól 9-ig.
P vagy p A 32 írásjel karakter és a szóköz karakter.
U vagy u A 26 nagybetűs karakter.
( Logikai vagy csoportosítás kezdete.
) Logikai vagy csoportosítás vége.
, Logikai vagy csoportban az egyes elemek elválasztása.

A minta felépítése Min.Max Kód alakú részekből álló sorozat. A kód egy a megfelelő speciális mintaillesztő karakterek közül, vagy egy minta, idézőjelek közé zárva. A Min, Max a minta előfordulásának mennyiségét jelzi.

Például:

S•X="3N1""-""2N1""-""4N"•W•"123-45-6789"?@X"

Mivel az indirekcióval megadott minta illeszkedik a szövegre, ezért a parancssor egy 1-est fog az aktuális eszközre írni.