Az Algol68 programozási nyelv

Unitok



Unitok

Az olvashatóságot javítandó az Algol68 azonosítókban szerepelhetnek szóköz karakterek. Minden változót deklarálni kell. A deklaráció során megadjuk a változó módját (típusát), majd vesszővel elválasztva azonosítókat. Az Algol68 kifejezés nyelv, azaz az utasításoknak is van visszatérő értékük, azok állhatnak értékadás jobb oldalán. Lehetőségünk van ilyenekre is:

[if i>0 then 1 else k-1 fi : 10] int c;

A kifejezéseket unitoknak hívjuk. Szerepük általánosabb, mint a programozási nyelvek legtöbbjében. A leggyakrabban előforduló unit-fajták a következők:

denotationkonstans, pl.: real pi := 3.14;
változópl.: i := 3;
formulaoperátor + operandus(ok)
Lehetnek egyoperandusúak vagy kétoperandusúak, több mint 100 beépített operátora van a nyelvnek. Pl.: "abc"+"xyz";
slicerésztömb pl.:
begin [1:10] int vector; vector[1,4] := (1,2,3,4); end;
szelekcióstruktúra egy elemének kiválasztása pl.: szerző of könyv := "A. A. Milne";
eljáráshíváspl.: print(x);
értékadásBaloldal (referencia T típus):= jobboldal (T típus) Mivel az éertékadásnak is értéke van, állhat értékadás jobboldalán. Pl.:
begin [1:3] int a; int i, j, k; a[i := j := k] := 3; end;
memória allokációKét memóriakezelés lehet verem és heap. Amikor egy eljárás meghívódik egy újabb szint képződik a veremben, ahol a lokális változók elhelyezkedhetnek. A loc kulcsszóval több tárat lehet kérni a veremben. loc m típusa az m objektumra mutató pointer (ref m) A programozó használhat heap-et is pl.: ptr : = heap[1:1000] real; Amikor a memória elfogy, szemétgyűjtő algoritmus csinál helyet.
Példák:
begin # valami számolás # begin # háromszögmátrix és loc demo # int n; read(n); [1:n] ref [] real triangle; # n db pointer valós vektorokra # for k from 1 to n do triangle[k] := loc[1:k] real; # k méretű sornak foglalunk helyet a veremben # for j from 1 to k # adjunk neki értéket # do triangle[k][j] := k + j od od end # a triangle által foglalt terület most már felszabadult # # teszteljük a szemétgyűjtőt # ref [] real ptr; to 1 000 000 # egymillió ismétlés # do ptr := heap[1:1000] real od end
nilnullpointer
castingkényszerítés módok között: (mód)változó
választási klózAlgol 68-ban megengedett, hogy az if és case utasítást unit-ként kezeljük. if felt then ut1 else ut2 fi ugyanaz mint ( felt | ut1 | ut2 ). Választási klóz nem szerepelhet értékadás baloldalán és típusának is függetlennek kell lennie attól, hogy végül is melyik ág választódik ki.
Példák:
x := if i3 then .3/x else z+4.0 fi; int abs x := if x0 the x else -x fi; int abs xx := (x0|x|-x); # ugyanaz mint az előző # w := (i<0|y|z)+(j<0|4.0|z+5);
zárt klózDeklarációk és utasítások sorozata begin end-ben vagy zárójelpárban. A módot és értéket az utolsó utasítás vagy deklaráció adja.
Példák:
k := (int i; read(i); i+1); int a,b,c; a := 3 * begin b := 1; c := b+1 end; # a 6, b 1, c 2 lesz #
mutatók összehasonlításaHasonlít az operátorokhoz, de végtelen sok számú módra működik (végtelen kis precedenciával). Két pointer ugyanarra az objektumra mutat-e: :=: Nilhez is hasonlíthatunk.
skipKét jelentése van. Egyrészt nemdefiniált értékű egység (akármilyen módú lehet), helykitöltésre használják. Másrészt üres utasítás, hogy szintaktikailag helyes legyen a program. skip != nil.
rutinszövegEljárástörzs, amit értékül adhatunk az eljárás változóknak.