A BLISS programozási nyelv

Absztrakt adattípusok



Szintaxis

A BLISS-32 nyelvben az adattípus fogalma csak korlátozottan létezik. Legalsó szinten BLISS-32-ben minden memóriahivatkozás a következő alakú (és ez szintaktikusan helyes kifejezés is):

cím < pozíció, hossz, előjel >

Ahol cím egy memóriabeli cím, pozíció a címtől számítva az első bit helyét adja meg, hossz a hosszát bitekben, előjel pedig azt, hogy előjelesen (1) vagy előjel nélkül (0) kell-e az adatot értelmezni.
Ennek segítségével definiálhatunk absztrakt adattípusokat. A definíció szintaxisa:

STRUCTURE típus [ hivatkozási paraméterek; foglalási paraméterek ] = [ méretfüggvény ] címfüggvény

Ahol a méretfüggvény egy egész kifejezés, melyben a foglalási paraméterek alkotják a független változókat, a címfüggvény pedig egy memóriahivatkozás, amelyben a hivatkozási paraméterek a független változók. A paraméterek mindkét csoportjában szerepelhet olyan paraméter, amely alapértelmezett értékkel rendelkezik. Ezt a paraméter neve utáni = érték értékadás adja meg. Amikor egy így definiált típusú változót deklarálunk, a deklarációnak a következő szintaxissal kell történnie (például OWN esetén):

OWN változó : típus [ foglalási paraméterek ]

Ekkor a megadott foglalási paraméterek a méretfüggvénybe behelyettesítésre kerülnek, és a függvény által meghatározott méretű memóriaterület a változóhoz rendelődik. A változóra való hivatkozásnak pedig a következő alakúnak kell lenni:

változó [ hivatkozási paraméterek ]

Ekkor a megadott hivatkozási paraméterek a címfüggvénybe helyettesítődnek, és annak értéke adja meg a hivatkozott memóriaterület címét és méretét.

A változó deklarációjakor a típus neve előtt állhat egy REF kulcsszó, ekkor a változóhoz nem foglalódik le terület, csupán egy mutató jön létre, amely egy adott típusú és adott méretű változóra mutathat.

BLOCK, BLOCKVECTOR és a hozzájuk hasonlóan definiált struktúrák esetében lehetőség van különböző hosszúságú, névvel ellátott mezőket is létrehozni (rekord). Ennek szintaxisa a következő:

FIELD szerkezetnév SET mezők TES

Ahol a mezők név = [ cím, pozíció, hossz, előjel ] alakúak, és egymástól vesszővel vannak elválasztva. A cím, pozíció, hossz, előjel ugyanazt jelentik, mint a legalsó szintű memóriahivatkozás esetén azzal a különbséggel, hogy a cím relatív a rekord kezdőcíméhez. Ennek segítségével a következőképpen lehet rekordot létrehozni:

OWN változó : BLOCK [ szerkezetnév ]

Ezután a rekord egyes mezőire változó [ mezőnév ] alakban lehet hivatkozni.
Példák (beépített típusok definíciója):

STRUCTURE VECTOR[ I; N, UNIT = 4, EXT = 0 ] = [ N * UNIT ] ( VECTOR + I * UNIT ) < 0, 8 * UNIT, EXT >;

STRUCTURE BITVECTOR [ I; N ] = [ ( N + 7 ) / 8 ] BITVECTOR < I, 1 >;

STRUCTURE BLOCK[ O, P, S, E; BS, UNIT = 4 ] = [ BS * UNIT ] ( BLOCK + O * UNIT ) < P, S, E >;

STRUCTURE BLOCKVECTOR [ I, O, P, S, E; N, BS, UNIT = 4 ] = [ N * BS * UNIT ] ( BLOCKVECTOR + ( I * BS + O ) * UNIT ) < P, S, E >;