A Modula2 programozási nyelv

Nyelvi elemek

Nyelvi kifejezések

Azonosítók

 Egy Modula-2 azonosító nem üres betûk vagy számjegyek betûvel kezdôdô sorozata. Az ISO szabvány Modula-2-ben az aláhúzásjel betûnek számít. (A nyelv egyes változatai az aláhúzásjelet nem engedik meg.) Azonosítóban nem szerepelhet szóköz és speciális szimbólum sem, mint például a +, -, %, /, $. A kis- és nagybetûk közt különbséget tesz a nyelv. A nyelv tartalmaz ún. standard azonosítokat, ezek nem egy könyvtárból kerülnek importálásra, hanem a nyelvbe beépítettek. Az ilyen azonosítókat teljesen nagybetûkkel írjuk. Egy érdekes, de nem túl szerencsés lehetôség, hogy a standard azonosítókat át is definiálhatjuk, ha kedvünk tartja. A lefoglalt szavak, mint például a BEGIN nem lehetnek azonosítók. Példák:

Ezek helyes azonosítók:
ListaHossz
Ez_is_jo

Ezek nem helyesek:
40Rablo
Ez$Mi

A CARDINAL standard azonosító eredetileg egy beépített típus neve, most átdefiniáljuk:
VAR CARDINAL : INTEGER;

Sztring literálok

 A sztring literál az egy egyszeres vagy kétszeres idézôjelek közé zárt karaktersorozat. Ha a sztringben elôfordul az egyszeres idézôjel (aposztróf), akkor a sztringet kétszeres idézôjelek közé kell zárni, és ez a fordított eseben is igaz. Egy sztringben nem lehet egyszerre mind a két típusú idézôjelbôl példány, ezen kívül kocsi vissza jelet sem tartalmazhat. Ezeken kívül a sztringliterálokra nincs más megszorítás. Példák:

"Don't stop!"
'Azt mondta, hogy ,,Hello", nem? '

Az ISO Modula-2 sztring literálok közt értelmez egy konkatenáció mûveletet, ezért írhatjuk azt, hogy:

 CONST
  CR = 15C
  LF = 12C;
  DOSLineEnd = CR + LF;
  strConst = "Szia" + " Kati"
  strConst2 = strConst + DOSLineEnd;
 

Megjegyzések

 A megjegyzés (* és *) közé zárt karaktersorozat, amely két szimbólum közé helyezhetô el. Példa:
(* Ez egy megjegyzes *)
 

Kulcsszavak

 Az elôre definiált szavakat nagybetûvel kell írni és azonosítóként nem használhatók. A <> helyett használható a # és az AND helyett az &.
 

Változók deklarációja

 Változókat egy modul elején, az utasítások kezdetét jelzô BEGIN kulcsszó elôtt deklarálhatunk. A változók deklarációjában azonosítók listája áll, melyet a típus azonosítója követ. A deklaráció nem biztosít kezdeti értéket a változónak, nekünk kell inicializálnni azt. Az ISO Modula-2-ben egy változódeklarációban megadhatjuk, hogy a memória melyik címén legyen a változó nevéhez rendelt tartalom. (Ehhez elôbb a SYSTEM modulból importálni kell a MAKEADR azonosítót.) A memóriacím konstans érték kell legyen és kapcsos zárójelekben kell a változónév után írni. Példák:

VAR Valtozo1, Valtozo2 : Tipus;
VAR flag [768] : INTEGER;
 

Kifejezések

Operandusok

 Az operandusok literálok (szám, karakter, sztring, halmaz) vagy azonosítók (konstans, változó, alprogram) lehetnek. Az azonosító lehet minôsített, szelektor egy rekord mezejére vagy indexelt hivatkozás tömb elemére. Szintaxis:

Minôsített hivatkozás: Modul.Valtozo
Rekord mezeje: Rekord.Mezo
Tömb eleme: Tomb[Index1]...[IndexN] vagy Tomb[Index1, ..., IndexN]
Mutató feloldása: Mutato^
 

Operátorok

 Az aritmetikai operátorok a +, -, *, /, DIV és MOD. A / csak valós, a DIV és MOD csak egész számokra használhatók, míg a többi mindkét félére, de ekkor a operandusok típusainak meg kell egyezniük és az eredmény típusa is ez lesz.

 A logikai operátorok a NOT, OR, a AND és az ezzel ekvivalens &. A kiértékelés lusta: ha a kifejezés értéke egyik felének értékébôl már megállapítható, akkor a másik fele ki sem értékelôdik.

A halmazoperátorok a + (unió), - (különbség), * (metszet) és / (szimmetrikus differencia).

 A relációoperátorok eredménye mindig logikai típusú. Az ekvivalenciarelációk (=, <> és az ezzel megegyezô értelmû #) használhatók számokra, karakterekre, felsorolási típusokra, halmazokra és mutatókra. A rendezési relációk (<=, >=, <, >) használhatók számokra, karakterekre, felsorolási típusokra és az elsô kettô halmazokra is, ahol a tartalmazási relációt jelölik. Speciális reláció az IN, amely eredménye akkor igaz, ha az elsô operandus eleme a második operandus halmaznak.

 Az operátoroknak elôre definiált precedenciája van, ezt zárójelek használatával bírálhatjuk felül. Az azonos precedenciájú mûveletek kiértékelése balról jobbra történik. Példák:

(1 + 1) * 2
((2 * 2) = 5) AND SOMETIMES
Elem IN Halmaz