A Joyce programozási nyelv

Változók

Egy változó egy olyan entitás, amelynek változtatható értéke van, amely értéknek a típusa fix.

Változó definíciók

VariableDefinitionPart = "var" VariableDefinition { VariableDefinition }.
VariableDefinition = VariableGroup ";".
VariableGroup = VariableName { "," VariableNAme } ":" TypeName.
VariableName = Name.

A következõ változó definíció:
v1,v2, ...vn:T;

egy eljárásban bevezeti a v1,v2,...,vn neveket, amelyek a T típus diszjunkt változó-osztályait jelölik. T-nek egy ismert típusnévnek kell lennie. Az eljárás minden aktiválása során ezen változóknak új példányai keletkeznek, definiálatlan kezdõ értékkel.

Példák

var buf: buffer; var x,y: integer; more: boolean; f: real; s: str; inp,succ: stream;

Változó hivatkozások

Variable Access = NamedVariableAcces | IndexedAccess | FieldAccess .
A változó hivatkozás egy változónak, mint operandusnak a használatát jelöli. Mikor egy ágensváltozó hivatkozást hajt végre, bármely index kifejezés, amely a változó hivatkozásban szerepel, egyszer értékelődik ki, az előfordulás sorrendjében. Ezt követően az ágens a saját változói között lokalizálja a változót.

Egyszerű változók

NamedVariableAcces = VariableName .
Azokat a változókat, amelyekre egyszerűen a nevükkel hivatkozunk, egyszerű változóknak nevezzük. Egy egyszerű változó típusát a változó- vagy paraméter- definíció során adjuk meg. Egy P ágens eljárás nem hivatkozhat olyan változóra, amely a P számára globális.

Példa

x

Indexelt változók

IndexedAccess = ArrayVariableAccess "[" IndexExpression "]".
ArrayVariableAccess = VariableAccess.
IndexExpression = Expression.

Egy változó v:T, amelynek típusa
T = array [min..max] of E;

Egy tömb értekét tárolja. A változó |T| különböző változó kompozíciója, amelyeket indexelt változóknak nevezünk. Mindegyik indexelt változó a tömb értékének egy-egy elemét tartalmazza. A v[e] indexelt hivatkozás a v-nek az e-vel indexelt változóját jelöli. v-nek T típusúnak kell lennie, és az index kifejezés e típusának meg kell egyeznie T index-típusával. Az indexelt hivatkozás típusa a tömb elemeinek E típusa lesz. Ha az e kifejezés kívül esik a min..max tartományon, akkor az indexelt kifejezés értéke definiálatlan lesz.

Példa


buf.contents[buf.head]

Mező változók

FieldAccess = RecordVariableAccess "." FieldName .
RecordVariableAccess = VariableAccess .

Egy v:T típusú változó, ahol
T = record f1:T1; f2:T2; ...fn:Tn end;

Egy rekord értéket tárol. A változó n különböző változó kompozíciója, melyeket mezőváltozóknak nevezünk.
A v.fi mező hivatkozás v-nek azt a mező változóját jelöli, amely az fi mező értékét tartalmazza. v-nek T típusúnak kell lennie, és fi-nek az f1, f2, ..., fn mezőnevek egyikének kell lennie. A mező hivatkozás típusa az fi mező Ti típusa lesz.

Példa

buf.head

Port változók

PortAccess = VariableAccess.

Egy v:T típusú változó, ahol
T = [s1(T1), s2(T2), ..., sn(Tn)];
egy port értéket tárol.

Ha v értéke nil T, a v port hivatkozás egy nem létező csatornát jelöl; különben egy olyan csatornát jelöl, amelynek az abc-je T-vel van megadva. A csatorna hivatkozás típusa T lesz.
Maga a csatorna nem egy változó, hanem egy-két vagy több ágens által használt kommunikációs eszköz.